【问题标题】:ASP.NET MVC Razor object HtmlAttributesASP.NET MVC Razor 对象 HtmlAttributes
【发布时间】: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。

【问题讨论】:

  • 因为这就是您覆盖name 属性的方式(请参阅herehere)。在其他情况下,@class 转义了 C# 保留的“类”关键字。 @ 不需要 @id 只需使用 id
  • 感谢您为我澄清这一点。
  • 在使用HtmlHelper 方法时切勿尝试覆盖name 属性,除非您希望您的应用程序失败。您的实现没有任何意义,也不会正确绑定到任何东西。如果你在一个循环中这样做,那么它的for (int i = 0; i &lt; Model.Count; i++) { @Html.RadioButtonFor(m =&gt; m[i].TickerSymbol, 1) @Html.RadioButtonFor(m =&gt; m[i].TickerSymbol, 2) }
  • 为什么我不尝试覆盖名称属性?那么如何可能正确地对单选按钮进行分组呢?我正在使用 foreach 循环:“@foreach(模型中的变量项)”。我的实现怎么没有意义?
  • 因为如果这样做,您将无法正确绑定到您的模型。 MVC 团队甚至在代码中内置了保护,因此您无法做到(但不幸的是,他们只考虑了小写 name)。您需要访问 MVC 站点,完成教程并了解基础知识。你的模型需要一个属性来绑定。

标签: asp.net-mvc razor asp.net-mvc-5.2


【解决方案1】:

当您在 htm 中使用 @ 时,表示它是 C# 代码块或元素,而 C# 中的 @ 是您的特殊变量名称,当名称与系统命令相同时(@class、@interface、@int 等)

 @// line of c# code
    @{
    //c# code body
    }

也尝试以这种方式使用您的按钮

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

【讨论】:

  • 感谢您的帮助。使用 Name=item.TickerSymbol 比我之前的代码干净得多,而且效果很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-04
  • 2021-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多