【发布时间】:2016-10-17 00:23:09
【问题描述】:
我想知道在 ASP.NET MVC 5 中添加对象 HtmlAttributes 的以下两种方法之间有什么区别。我在 foreach 循环中使用 RadioButtonFor html 帮助程序,并且在设置收音机的名称属性时遇到问题按钮,以便我可以正确地将它们分组。我现在可以使用它,但我不明白为什么我找到的解决方案(在此处找到的解决方案:MVC RadioButtonFor group)有效,为什么我的无效。
非工作方法:
<td>@Html.RadioButtonFor(m => item.PollRating, 1, new { @name = Html.DisplayFor(m => item.TickerSymbol) }) Below </td>
工作方式:
<td>@Html.RadioButtonFor(m => item.PollRating, 2, new { Name = Html.DisplayFor(m => item.TickerSymbol) }) Flat </td>
区别在于对象 htmlAttributes 使用 @name 与 Name。每当我在使用 html 帮助程序时必须分配一个类或 id 时,我都会使用 @class 或 @id 表示法,但在这种情况下它不适用于名称。 当我将鼠标悬停在 Visual Studio 中的 @name 和 Name 上时,我会看到相同的弹出消息:
"MvcHtmlString 'a.Name {get;}
匿名类型:
'a is new {MvcHtmlString Name}"
我使用的是Visual Studio 2015,目标.NET Framework是4.5.2,MVC版本是5.2.3.0。
【问题讨论】:
-
感谢您为我澄清这一点。
-
在使用
HtmlHelper方法时切勿尝试覆盖name属性,除非您希望您的应用程序失败。您的实现没有任何意义,也不会正确绑定到任何东西。如果你在一个循环中这样做,那么它的for (int i = 0; i < Model.Count; i++) { @Html.RadioButtonFor(m => m[i].TickerSymbol, 1) @Html.RadioButtonFor(m => m[i].TickerSymbol, 2) } -
为什么我不尝试覆盖名称属性?那么如何可能正确地对单选按钮进行分组呢?我正在使用 foreach 循环:“@foreach(模型中的变量项)”。我的实现怎么没有意义?
-
因为如果这样做,您将无法正确绑定到您的模型。 MVC 团队甚至在代码中内置了保护,因此您无法做到(但不幸的是,他们只考虑了小写
name)。您需要访问 MVC 站点,完成教程并了解基础知识。你的模型需要一个属性来绑定。
标签: asp.net-mvc razor asp.net-mvc-5.2