Razor View Engine: uma árvore de expressão pode não conter uma operação dinâmica


173

Eu tenho um modelo semelhante a este:

public class SampleModel
{
     public Product Product { get; set; } 
}

E no meu controlador eu recebo uma exceção tentando imprimir

@Html.TextBoxFor(p => p.Product.Name)

Este é o erro:

Exception: An expression tree may not contain a dynamic operation

Se alguém puder me dar algumas dicas sobre como consertar isso, eu realmente aprecio isso!


1
Isso está no MVC3 RC? Você também pode nos mostrar como é o produto? Eu era incapaz de reproduzi-lo no MVC3 RC
bmancini 11/11/2010

Respostas:


297

Parece-me que você tem uma visão não digitada. Por padrão, as visualizações do Razor no MVC3 RC são digitadas como dynamic. No entanto, lambdas não suportam membros dinâmicos. Você precisa digitar fortemente seu modelo. Na parte superior do seu arquivo de visualização, adicione

@model SampleModel

11
foi um m maiúsculo que fez isso por mim
whossname

e se você tiver um modelo?
djack109

92

Um erro comum que é a causa disso é quando você adiciona

@Model SampleModel

no topo da página em vez de

@model SampleModel

5
Obrigado por anexar esta resposta! Incrível como, depois de anos de programação, você pode esquecer a distinção entre maiúsculas e minúsculas.
brentlightsey

1
Também pode acontecer se você usar "model" em vez de "@Model" ... que será construído, mas falhará em tempo de execução.
21815 Dave Remy

8

Neste link, explique sobre o @model, veja um trecho:

@model(minúsculas "m") é uma palavra-chave reservada nas visualizações do Razor para declarar o tipo de modelo na parte superior da visualização. Você também colocou o espaço para nome, por exemplo:@model MyNamespace.Models.MyModel

Posteriormente no arquivo, você pode fazer referência ao atributo desejado @Model.Attribute("M" maiúsculo).


2
Este foi o meu problema. Se você não está assistindo com atenção, o Visual Studio tende a converter o que você está digitando na maiúscula "M". É realmente irritante.
precisa saber é o seguinte

7

Parece que sua visualização foi digitada dynamic. Defina o tipo certo na visualização e você verá o erro desaparecer.


5

Antes de usar (digite fortemente o auxiliar html em exibição) esta linha

@Html.TextBoxFor(p => p.Product.Name)

Você deve incluir seu modelo na sua página para criar uma exibição de tipo forte.

@model SampleModel

1

Este erro aconteceu comigo porque eu tinha @@ model em vez de @model ... copiar e colar no meu caso. Alterar para @model o corrigiu para mim.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.