您好我正在尝试显式更改EditorFor输出中的ID和Name以及Validate-For字段。
我有以下代码:
Html.EditorFor(x => ViewBag.NestedFormDatas)
上面的所有字段都带有当前模型名称的前缀。
我的临时解决方案如下(我知道它远非理想但它有效!):
@Html.Raw(Html.EditorFor(x => ViewBag.NestedFormDatas).ToHtmlString().Replace("NestedForm", "DesiredPrefix"))
答案 0 :(得分:2)
我怀疑您需要更改id
和name
属性,因为您没有使用视图模型。以下似乎错了:
@Html.EditorFor(x => ViewBag.NestedFormDatas)
如果您正确使用视图模型,则无需更改名称和ID,因为编辑器模板已经生成了正确的值:
@Html.EditorFor(x => x.NestedFormDatas)
无论如何,一种可能性是为给定类型编写自定义编辑器模板。因此,如果我们假设NestedFormDatas
是字符串类型,您可以添加以下~/Views/Shared/EditorTemplates/String.cshtml
编辑器模板来覆盖the default one,并允许您指定其他属性:
@Html.TextBox(
"",
ViewData.TemplateInfo.FormattedModelValue,
ViewData
)
然后:
@Html.EditorFor(x => x.NestedFormDatas, new { id = "foo" })
就name
属性而言,这不是可以用TextBox
助手覆盖的东西。如果您需要实现这一目标,则必须编写自己的帮助程序。但正如我所说,如果你使用视图模型,你永远不需要这样做,因为这正是视图模型的目的:它们是专门定义的,以匹配给定视图的要求。
因此,在代码中删除ViewBag
的任何痕迹并开始定义视图模型。您将看到ASP.NET MVC将变得多么有趣和轻松。
答案 1 :(得分:0)
你当然可以尝试利用htmlAttributes参数来覆盖TextBoxFor的html属性:
@Html.TextBoxFor(x=>item.Name,new { id="newId"})
我正在查看您的代码的问题是您正在使用动态视图数据字典(ViewBag),其方法是针对已知类型的对象属性。我强烈建议用具有强类型集合的ViewModel替换ViewBag。这将解决你的字段命名问题(我只假设,但这是我唯一能想到的从输入元素中删除前缀的原因)