您好,我正在尝试显式地更改EditorFor输出中的ID、Name和Validate For字段。
我有以下代码:
Html.EditorFor(x => ViewBag.NestedFormDatas)上面的代码以当前Model的名称作为所有字段的前缀。
我的临时解决方案如下(我知道它远非理想,但它是有效的!)
@Html.Raw(Html.EditorFor(x => ViewBag.NestedFormDatas).ToHtmlString().Replace("NestedForm", "DesiredPrefix"))发布于 2012-02-13 02:23:10
我怀疑您需要更改id和name属性,因为您没有使用视图模型。下面这句话似乎大错特错:
@Html.EditorFor(x => ViewBag.NestedFormDatas)如果您正确使用视图模型,则不需要更改名称和If,因为编辑器模板已经生成了正确的值:
@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将变得多么有趣和简单。
发布于 2012-02-13 02:15:48
您当然可以尝试使用htmlAttributes参数来使用TextBoxFor覆盖html属性:
@Html.TextBoxFor(x=>item.Name,new { id="newId"})我在查看您的代码时所担心的是,您正在使用动态视图数据字典(ViewBag)和一个用于已知类型的对象属性的方法。我强烈建议用具有强类型集合的ViewModel替换ViewBag。这将解决字段命名的问题(我只是假设,但这是我唯一能想到的从输入元素中删除前缀的原因)
https://stackoverflow.com/questions/9250657
复制相似问题