2010-09-16 62 views
6

我正在玩使用Razer語法的MVC3,但我相信這個問題更一般。ASP.Net MVC,查看頁面<Dynamic>和EditorFor/LabelFor

在控制器中,我有這樣的:

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

我查看從System.Web.Mvc.ViewPage

繼承但是,如果我嘗試做一些事情,如:

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

我得到錯誤:「表達式樹可能不包含動態操作」

但是, ViewPage的使用看起來很常見,就像EditorFor/LabelFor一樣。因此,如果沒有辦法做到這一點,我會感到驚訝 - 欣賞任何指針。

回答

0

看來表達式樹=>http://msdn.microsoft.com/en-us/library/bb397951.aspx不得包含任何動態變量。

不幸的是,當你使用動力學時,TModel就是這種情況。

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

請勿使用ViewPage<Dynamic>。我建議你使用一個視圖模型,並強烈鍵入您的視圖這個視圖模型:

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

,然後強烈鍵入您的視圖ViewPage<MyViewModel>和:

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

爲了輸入您的視圖,請將@model Namespace.Classname聲明添加到cshtml文件的頂部。 – xt1 2012-03-30 10:44:59