Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在嵌套的EditorFor中重写EditorFor ID字段_C#_Asp.net Mvc 3_Razor - Fatal编程技术网

C# 在嵌套的EditorFor中重写EditorFor ID字段

C# 在嵌套的EditorFor中重写EditorFor ID字段,c#,asp.net-mvc-3,razor,C#,Asp.net Mvc 3,Razor,您好,我正在尝试显式更改EditorFor输出中字段的ID和名称并进行验证 我有以下代码: Html.EditorFor(x => ViewBag.NestedFormDatas) 以上所有字段都以当前模型的名称作为前缀 我的临时解决方案如下(我知道这远非理想,但它确实有效!): 您当然可以尝试使用htmlAttributes参数,用TextBoxFor覆盖html属性: @Html.TextBoxFor(x=>item.Name,new { id="newId"}) 我在查看您

您好,我正在尝试显式更改EditorFor输出中字段的ID和名称并进行验证

我有以下代码:

Html.EditorFor(x => ViewBag.NestedFormDatas)
以上所有字段都以当前模型的名称作为前缀

我的临时解决方案如下(我知道这远非理想,但它确实有效!):


您当然可以尝试使用htmlAttributes参数,用TextBoxFor覆盖html属性:

@Html.TextBoxFor(x=>item.Name,new { id="newId"})

我在查看您的代码时担心的是,您正在使用动态视图数据字典(ViewBag)和一个用于已知类型的对象属性的方法。我强烈建议将ViewBag替换为具有强类型集合的ViewModel。这将解决您的字段命名问题(我只是假设,但这是我唯一能想到的从输入元素中删除前缀的原因)

我怀疑您需要更改
id
name
属性,因为您没有使用视图模型。以下几点似乎完全错了:

@Html.EditorFor(x => ViewBag.NestedFormDatas)
如果正确使用视图模型,则无需更改名称和ID,因为编辑器模板已生成正确的值:

@Html.EditorFor(x => x.NestedFormDatas)
无论如何,一种可能是为给定类型编写自定义编辑器模板。因此,如果我们假设
NestedFormDatas
是字符串类型,您可以添加以下
~/Views/Shared/EditorTemplates/string.cshtml
编辑器模板以覆盖并允许您指定其他属性:

@Html.TextBox(
    "", 
    ViewData.TemplateInfo.FormattedModelValue,
    ViewData
)
然后:

@Html.EditorFor(x => x.NestedFormDatas, new { id = "foo" })
name
属性而言,这不是可以用
TextBox
helper覆盖的。如果需要,您必须编写自己的助手。但正如我所说,如果您使用视图模型,您永远不需要这样做,因为这正是视图模型的目的:它们是专门定义的,以匹配给定视图的需求


因此,在代码中去掉
ViewBag
的任何痕迹,并开始定义视图模型。您将看到ASP.NET MVC将变得多么有趣和简单。

Darin,在这种情况下,是否有特别的原因在id前面加上@?我知道这是“课堂”的必修课。。。更重要的是,我不认为您的示例可以用作EditorFor,因为TextBoxFor没有将htmlAttributes作为输入的覆盖parameter@torm,绝对不是。这是我角色的一个坏拷贝粘贴。它已经被删除了。哦,好吧,我想这背后有某种诡计:)编辑呢?你能检查一下吗?我将重新讨论ViewModel方法,但对我来说,这样的方法应该不会太难。然而,我已经说过,我通常不需要与框架抗争,并且发现当我这么做时,通常意味着我做错了!我通常同意使用ViewModel,但我不同意的原因是因为该模型是正确的,但我用于创建视图的方法有点非正统。这很难解释。实际上,在我的视图中,我选择将对象列表移动到另一个编辑器模板中的另一个区域。从用户的角度来看,这是有意义的,但在代码中,我必须修改ID字段以重新连接发布的模型。我的ID需要成为“DesiredPrefix\u 0\uu NestedFormData\u 0\uu Property”,以前是“NestedForm\u 0\uu NestedFormData\u 0\uu Property”。在这种情况下,DesiredPrefix是模型上的另一个列表。
@Html.EditorFor(x => x.NestedFormDatas, new { id = "foo" })