【问题标题】:ASP.Net MVC, ViewPage<Dynamic> and EditorFor/LabelForASP.Net MVC、ViewPage<Dynamic> 和 EditorFor/LabelFor
【发布时间】:2010-09-16 16:00:56
【问题描述】:

我正在使用 Razer 语法使用 MVC3,但我认为问题更普遍。

在控制器中,我有类似的东西:

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 也是如此。因此,如果没有办法做到这一点,我会感到惊讶 - 感谢任何指针。

【问题讨论】:

    标签: asp.net-mvc dynamic


    【解决方案1】:

    不要使用ViewPage&lt;Dynamic&gt;。我建议您使用视图模型并将您的视图强输入到该视图模型中:

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

    然后将您的视图强烈键入ViewPage&lt;MyViewModel&gt; 并:

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

    【讨论】:

    • 为了输入你的视图,在你的 cshtml 文件的顶部添加一个@model Namespace.Classname 声明。
    【解决方案2】:

    似乎表达式树 => http://msdn.microsoft.com/en-us/library/bb397951.aspx 不能包含任何动态变量。

    不幸的是,当您在其中使用动态时,TModel 就是这种情况。

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

    【讨论】:

      猜你喜欢
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 2012-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-30
      • 1970-01-01
      相关资源
      最近更新 更多