2010-09-16 64 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