【发布时间】:2012-01-09 08:21:25
【问题描述】:
我有这个 Razor 模板
<table>
<tr>
<td>@Html.RadioButtonFor(i => i.Value, "1")</td>
<td>@Html.LabelFor(i => i.Value, "true")</td>
</tr>
<tr>
<td>@Html.RadioButtonFor(i => i.Value, "0")</td>
<td>@Html.LabelFor(i => i.Value, "false")</td>
</tr>
</table>
这给了我这个 HTML
<table>
<tr>
<td><input id="Items_1__Value" name="Items[1].Value" type="radio" value="1" /></td>
<td><label for="Items_1__Value">true</label></td>
</tr>
<tr>
<td><input checked="checked" id="Items_1__Value" name="Items[1].Value" type="radio" value="0" /></td>
<td><label for="Items_1__Value">false</label></td>
</tr>
</table>
所以我有两次 ID Items_1__Value,这当然是不好的,并且在我点击第二个标签“false”时无法在浏览器中工作,第一个收音机将被激活。
我知道我可以在 RadioButtonFor 添加一个自己的 Id 并用我的标签引用它,但这不是很好,是吗?特别是因为我处于一个循环中并且不能只使用名称“值”和一个附加数字,这最终也会在我的最终 HTML 标记中出现多个 Dom Id。
不应该是一个好的解决方案吗?
【问题讨论】:
-
我认为你最好的选择是创建你自己的自定义 HtmlHelper,它可以输出一个单选按钮和一个标签,考虑到你传入的默认值。
-
我选择了简单的选项并使用 Html.Raw 来编写标签 html,它只需要做这么多。使用
ViewData.TemplateInfo.GetFullHtmlFieldId生成单选按钮的 id,以便在标签中使用。
标签: asp.net-mvc-3 razor