2010-09-16 25 views
6

Estoy jugando con MVC3 usando la sintaxis de Razer, aunque creo que el problema es más general.ASP.Net MVC, ViewPage <Dynamic> y EditorFor/LabelFor

En el controlador, tengo algo como:

ViewModel.User = New User(); // The model I want to display/edit 
ViewModel.SomeOtherProperty = someOtherValue; // Hense why need dynamic 
Return View(); 

Mi Ver hereda de System.Web.Mvc.ViewPage

Pero si trato de hacer algo como:

<p> 
@Html.LabelFor(x => x.User.Name 
@Html.EditorFor(x => x.User.Name 
</p> 

Aparece el error: "Un árbol de expresiones no puede contener una operación dinámica"

Sin embargo, el uso de ViewPage parece bastante común, al igual que EditorFor/LabelFor. Por lo tanto, me sorprendería si no hubiera una forma de hacerlo: agradecer cualquier sugerencia.

Respuesta

0

parece que los árboles de expresión =>http://msdn.microsoft.com/en-us/library/bb397951.aspx no debe contener ninguna variable dinámica.

Desafortunadamente, este es el caso de TModel cuando usa dinámicas en él.

public static MvcHtmlString TextBoxFor<TModel, TProperty>(
    this HtmlHelper<TModel> htmlHelper, 
    Expression<Func> expression 
) 
3

No utilice ViewPage<Dynamic>. Yo le recomendaría el uso de un modelo de vista y escriba firmemente su punto de vista a este modelo de vista:

var model = new MyViewModel 
{ 
    User = new User 
    { 
     Name = "foo" 
    }, 
    SomeOtherProperty = "bar" 
}; 
return View(model); 

y escriba firmemente el fin de ViewPage<MyViewModel> y:

@Html.LabelFor(x => x.User.Name) 
@Html.EditorFor(x => x.User.Name) 
<div>@Model.SomeOtherProperty</div> 
+0

Para escribir su vista, agregue una declaración @model Namespace.Classname a la parte superior de su archivo cshtml. – xt1