ASP.NET MVC 4覆盖了发出的html名称和id

Sna*_*ake 56 asp.net-mvc asp.net-mvc-4 razor-2

我正在尝试更改由其创建的html输入的发出名称@Html.HiddenFor.

我正在使用的代码:

@Html.HiddenFor(e => e.SomeProperty, new { @id = "some_property", @name = "some_property" }
Run Code Online (Sandbox Code Playgroud)

现在这适用于id,但它不适用于名称.现在我真的不关心id现在,我需要name改变,因为那是被发布回目标服务器的那个.

在那儿

  • 我可以SomeProperty在我的模型中申请的财产?
  • 一种Html.HiddenFor覆盖name属性的方法?

还是我坚持<input ...>用手做一个平原?

nem*_*esv 108

您需要使用Html.Hidden(或<input ...>手写)而不是Html.HiddenFor

@Html.Hidden("some_property", Model.SomeProperty, new { @id = "some_property" })
Run Code Online (Sandbox Code Playgroud)

强类型帮助程序的目标(例如名称结尾为"For"的HiddenFor那个)是从提供的表达式中猜出输入名称.因此,如果您想要一个"自定义"输入名称,您可以随时使用常规帮助程序,例如Html.Hidden您可以显式设置名称的位置.

unjuken答案是错误的,因为它会生成无效的 HTML.

使用该解决方案生成两个 name属性:

<input  Name="some_property"  name="SomeProperty" id="some_property" type="hidden" value="test" /> 
Run Code Online (Sandbox Code Playgroud)

所以你会有Name="some_property" AND name="SomeProperty"这是无效的 HTML,因为输入只能有一个 name属性!(虽然大多数情人碰巧拿第一个Name="some_property"而不关心第二个...)

  • @sovemp我的回答不工作,它并用`name`属性工作:点,如果你使用`Html.Hidden`的第一个参数将作为名称:`@ Html.Hidden("somePopertyName","someValue中"新的{@id = "some_property"})`它会产生`<输入的ID = "some_property" 名称= "somePopertyName" 类型= "隐藏" 值= "someValue中"/>`也可以手动建立输入(正如我在答案的第一行中所提到的那样,你也得出结论...... (2认同)
  • @nemesv 哦,好吧抱歉我误解了。我将编辑我的答案以反映这一点。一个小建议,也许在你的回答中使用不同的 name 和 id 值使这更明显,而不是两者的“some_property” (2认同)

unj*_*ken 38

如果您使用:

@ Html.HiddenFor(e => e.SomeProperty,new {@id ="some_property",@ Name ="some_property"});

注意@Name中的大写"N".它会工作.

  • -1这不起作用.Chrome(或任何其他浏览器)会更正错误的html,这并不意味着呈现正确的html.请不要使用它.如果铬改变那里固定方法然后当然无效的HTML将被渲染. (8认同)
  • @MiniRagnarok不行不通.您最终会得到两个名称属性.因为上面的代码生成`<input Name ="some_property"name ="SomeProperty"id ="some_property"type ="hidden"value ="test"/>`你在哪里`Name ="some_property"`AND`name = "SomeProperty"`这是无效的HTML!(虽然大多数浏览器碰巧采用第一个`Name ="some_property"`并且不关心第二个......) (4认同)
  • 不起作用,Chrome正在清理HTML.请回答这个问题 (4认同)