2010-09-16 11 views
6

Razer sözdizimini kullanarak MVC3 ile oynuyorum, ancak sorunun daha genel olduğuna inanıyorum. denetleyici olarak ASP.Net MVC, ViewPage <Dynamic> ve EditorFor/LabelFor

, ben gibi bir şey var:

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

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

Benim Görünüm System.Web.Mvc.ViewPage

devraldığı Ama böyle bir şey yapmak denerseniz

Hatayı alıyorum: "Bir ifade ağacı dinamik bir işlem içermiyor"

Ancak, ViewFage kullanımı, EditorFor/LabelFor gibi oldukça yaygın görünüyor. Bu yüzden bunu yapmanın bir yolu olmasa şaşırırdım - herhangi bir işaretçiyi takdir et.

cevap

0

Bu ifade ağaçları =>http://msdn.microsoft.com/en-us/library/bb397951.aspx görünüyor herhangi bir dinamik değişken içermemelidir.

Ne yazık ki, bu dinamikleri kullandığınızda TModel için durum böyle.

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

ViewPage<Dynamic>'u kullanmayın. Ben bir görünüm modeliyle tavsiye ve şiddetle bu görünüm modeli için görünümünüzü yazarsınız:

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

ve sonra şiddetle ViewPage<MyViewModel> için görünümünüzü yazıp:

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

Görünümünüzü yazmak için, cshtml dosyanızın üst kısmına bir MIME Namespace.Classname bildirimi ekleyin. – xt1