ASP.Net MVC,ViewPage <dynamic>和EditorFor / LabelFor </dynamic>

时间:2010-09-16 16:00:57

标签: asp.net-mvc dynamic

我正在使用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也是如此。因此,如果没有办法做到这一点,我会感到惊讶 - 欣赏任何指示。

2 个答案:

答案 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
)