即使签名与EditorFor完全匹配,Razor也无法编译

本文关键字:Razor 编译 EditorFor | 更新日期: 2023-09-27 18:06:10

我正在使用MVC 5.2,我在一个视图中多次使用的部分视图中工作,以绑定到我的视图模型中的对象列表。

为了使它正确绑定,我的理解是html对象的名称需要看起来像Model[x]. property。我能为EditorFor找到的唯一签名是

,它允许我在保持添加html属性的能力的同时做到这一点。
public static MvcHtmlString EditorFor<TModel, TValue>(
    this HtmlHelper<TModel> html,
    Expression<Func<TModel, TValue>> expression,
    string templateName,
    string htmlFieldName,
    object additionalViewData
)

我的问题是,如果我试图在htmlFieldName字段连接任何东西,它告诉我有无效的参数。如果我使用一个没有连接的普通字符串,工作得很好。我已经尝试了所有类型的连接,下面是我尝试过的一个例子。

@Html.EditorFor(model => model.Name,"", @String.Format("Contacts[{0}].Name",ViewBag.Id), new { htmlAttributes = new { @class = "form-control" } })

HtmlHelper'不包含'EditorFor'和最佳扩展方法重载' editoreextensions的定义。EditorFor(HtmlHelper, Expression>, string, string, object)

我是否试图以错误的方式完成此任务?是否有更好的方法来绑定对象列表?此外,我如何维护的东西,如regex验证,它似乎不再工作,一旦我改变了名称。

即使签名与EditorFor完全匹配,Razor也无法编译

转换动态ViewBag.Id满足Razor编译器,错误消失。

@Html.EditorFor(model => model.Name,
    "",
    String.Format("Contacts[{0}].Name", ViewBag.Id as string),
    new { htmlAttributes = new { @class = "form-control" } }
)