MVC组件呈现为具有相同id的html组件

时间:2011-09-05 01:09:50

标签: asp.net-mvc

说我有:

@Html.RadioButtonFor(modelItem => item.CheckerApproved, true)
@Html.LabelFor(modelItem => item.CheckerApproved, "Accepted")
@Html.RadioButtonFor(modelItem => item.CheckerApproved, false)
@Html.LabelFor(modelItem => item.CheckerApproved, "Rejected")

当我查看页面源代码时,我有类似的内容:

<input id="item_CheckerApproved" name="item.CheckerApproved" type="radio" value="True" />
<label for="item_CheckerApproved">Approved</label>
<input checked="checked" id="item_CheckerApproved" name="item.CheckerApproved" title="" type="radio" value="False" />
<label for="item_CheckerApproved">Rejected</label>

与第一个输入相关联的标签。

输入似乎具有相同的ID。这不好吗?如何绕过它?

2 个答案:

答案 0 :(得分:1)

for属性将设置为LabelFor谓词中提供的任何内容。

这不应该是一个复选框而不是两个单选按钮吗?

E.g:

@Html.CheckBoxFor(model => model.CheckerApproved)
@Html.LabelFor(model => model.CheckerApproved)

是的 - 拥有重复的ID是不好的。它不符合XHTML标准。

特别是如果您开始使用客户端脚本,您的选择器将出现问题:

$('#item_CheckerApproved'); // which checkbox will this retrieve? 

答案 1 :(得分:1)

您可以通过为每个单选按钮指定ID来解决此限制,如下所示,然后只需使用Html.Label并指定单选按钮的ID即可将其链接。

<%= Html.RadioButtonFor(model => model.CheckerApproved, true, new { id = "Approved" })%>
<%: Html.Label("Approved")%>

<%= Html.RadioButtonFor(model => model.CheckerApproved, false, new { id = "Rejected" })%>
<%: Html.Label("Rejected")%>
相关问题