我正在使用Razer语法玩MVC3,不过我认为这个问题更为普遍。
在控制器中,我有类似的东西:
ViewModel.User = New User(); // The model I want to display/edit
ViewModel.SomeOtherProperty = someOtherValue; // Hense why need dynamic
Return View();
My View继承自System.Web.Mvc.ViewPage
但如果我尝试做类似的事情:
<p>
@Html.LabelFor(x => x.User.Name
@Html.EditorFor(x => x.User.Name
</p>
我收到错误:“表达式树可能不包含动态操作”
然而,使用ViewPage似乎很常见,编辑器/ LabelFor也是如此。因此,如果没有办法做到这一点,我会感到惊讶 - 欣赏任何指示。
答案 0 :(得分: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>
答案 1 :(得分:0)
表达式似乎是树=&gt; http://msdn.microsoft.com/en-us/library/bb397951.aspx不得包含任何动态变量。
不幸的是,当您在其中使用动态时,TModel就是这种情况。
public static MvcHtmlString TextBoxFor<TModel, TProperty>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func> expression
)