2010-09-16 11 views
6

Sto giocando con MVC3 usando la sintassi Razer, anche se credo che il problema sia più generale.ASP.Net MVC, ViewPage <Dynamic> e EditorFor/LabelFor

Nel controllore, ho qualcosa di simile:

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

My View eredita da System.Web.Mvc.ViewPage

Ma se provo a fare qualcosa di simile:

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

Viene visualizzato l'errore: "Un albero di espressioni non può contenere un'operazione dinamica"

Tuttavia, l'uso di ViewPage sembra abbastanza comune, come lo sono EditorFor/LabelFor. Quindi sarei sorpreso se non c'è un modo per farlo - apprezzare qualsiasi suggerimento.

risposta

0

sembra che l'alberi espressione =>http://msdn.microsoft.com/en-us/library/bb397951.aspx non deve contenere alcuna variabile dinamica

Sfortunatamente questo è il caso di TModel quando si utilizza la dinamica in esso.

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

Non utilizzare ViewPage<Dynamic>. Vi consiglio di utilizzare un modello di vista e fortemente digitare l'immagine per questo modello di vista:

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

e quindi fortemente digitare l'immagine per ViewPage<MyViewModel> e:

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

Per digitare la vista, aggiungere una dichiarazione di Namespace.Classname @model all'inizio del file cshtml. – xt1

Problemi correlati