Asp.net mvc ASP.NET MVC Razor对象HTML属性

Asp.net mvc ASP.NET MVC Razor对象HTML属性,asp.net-mvc,razor,asp.net-mvc-5.2,Asp.net Mvc,Razor,Asp.net Mvc 5.2,我想知道以下两种在ASP.NET MVC 5中添加对象HtmlAttributes的方法之间有什么区别。我在foreach循环中使用了一个RadioButtonForHTML帮助程序,在设置单选按钮的name属性以便正确分组时遇到了问题。我现在可以用了,但我不明白为什么我找到的解决方案(这里找到的解决方案:)有效,而我的却不行 非工作方法: <td>@Html.RadioButtonFor(m => item.PollRating, 1, new { @name = Html.

我想知道以下两种在ASP.NET MVC 5中添加对象HtmlAttributes的方法之间有什么区别。我在foreach循环中使用了一个RadioButtonForHTML帮助程序,在设置单选按钮的name属性以便正确分组时遇到了问题。我现在可以用了,但我不明白为什么我找到的解决方案(这里找到的解决方案:)有效,而我的却不行

非工作方法:

<td>@Html.RadioButtonFor(m => item.PollRating, 1, new { @name = Html.DisplayFor(m => item.TickerSymbol) }) Below </td>
@Html.radiobutton(m=>item.PollRating,1,新的{@name=Html.DisplayFor(m=>item.TickerSymbol)})如下
工作方法:

<td>@Html.RadioButtonFor(m => item.PollRating, 1, new { @name = Html.DisplayFor(m => item.TickerSymbol) }) Below </td>
@Html.radiobutton(m=>item.PollRating,2,新的{Name=Html.DisplayFor(m=>item.TickerSymbol)})平面
区别在于对对象htmlAttributes使用@name vs name。每当我在使用html帮助程序时必须分配一个类或id时,我都使用@class或@id符号,但在这种情况下,它对name不起作用。 当我在Visual Studio中将鼠标悬停在@name和name上时,我会看到相同的弹出消息,其中指出:

“MvcHtmlString'a.Name{get;}

匿名类型:

'a是新的{MvcHtmlString Name}'


我使用的是Visual Studio 2015,target.NET Framework是4.5.2,MVC版本是5.2.3.0。

当您在htm中使用@时,它意味着它是C代码块或元素,@在C中是特殊变量名称,当名称与system comand(@class、@interface、@int等)相同时

也试着用这种方式使用你的按钮

<td>@Html.RadioButtonFor(m => item.PollRating, 2, new { Name=item.TickerSymbol }) Flat </td>
@Html.radiobutton(m=>item.PollRating,2,新的{Name=item.TickerSymbol})平面

因为这就是覆盖
名称
属性的方式(请参见和)。在其他情况下,
@class
转义C#reserved“class”关键字
@
对于
@id
不是必需的,只需使用
id
。感谢您为我澄清这一点。除非您希望应用程序失败,否则在使用
HtmlHelper
方法时,切勿尝试覆盖
name
属性。您的实现毫无意义,无法正确绑定到任何内容。如果您在循环中执行此操作,那么它的
for(int i=0;im[i].TickerSymbol,1)@Html.radiobutton(m=>m[i].TickerSymbol,2)}
为什么我不尝试覆盖名称attirbutte?那么,怎样才能正确地对单选按钮进行分组呢?我使用的是foreach循环:“@foreach(模型中的var项)”。我的实现怎么会毫无意义呢?因为如果这样做,您就无法正确绑定到您的模型。MVC团队甚至在代码中内置了保护功能,因此您无法做到这一点(但不幸的是,他们只考虑了小写的
name
)。您需要访问MVC站点,阅读教程并了解基础知识。您的模型需要绑定到属性。感谢您的帮助。使用Name=item.TickerSymbol比我以前的代码干净得多,效果非常好。
<td>@Html.RadioButtonFor(m => item.PollRating, 2, new { Name=item.TickerSymbol }) Flat </td>