我正在使用MVC,我在foreach中有一些RadioButton:
foreach (var item in group) { <tr> <td> @Html.RadioButtonFor(modelItem => item.CheckerApproved,true) @Html.RadioButtonFor(modelItem => item.CheckerApproved,false) </td> </tr> }
因此,对于组中的每个项目,都应该有一个真假的单选按钮.
问题是当组中有多个项目时,您最终可能会遇到两个项目:
<tr> <td> <input id="item_CheckerApproved" type="radio" value="True" name="item.CheckerApproved"> <input id="item_CheckerApproved" type="radio" value="False" name="item.CheckerApproved checked="checked"> </td> </tr> <tr> <td> <input id="item_CheckerApproved" type="radio" value="True" name="item.CheckerApproved"> <input id="item_CheckerApproved" type="radio" value="False" name="item.CheckerApproved checked="checked"> </td> </tr>
我想要的是无线电按钮组是分开的.因此,更改第一行中的值不会影响第二行中的值.但是,如果您在顶行设置了say,则选择第二行中的任一值,取消第一行中的true.
我相信这是因为它们是由name属性链接的.但是,您实际上无法手动重置此名称属性.
有谁知道我怎么能使它工作,所以每一行的真假互相交互,但对其他行的radiobuttons没有影响?
解决方法
不要在视图中写循环.它们是丑陋的,你最终会遇到你问题中描述的不良行为.使用编辑器模板,如下所示:
<table> <thead> <tr> <th>Approved status</th> </tr> </thead> <tbody> @Html.EditorFor(x => x.Groups) </tbody> </table>
这里我假设您的视图模型具有IEnumerable< Groupviewmodel>类型的Groups集合属性.现在剩下的就是编写相应的编辑器模板,该模板将对Groups集合中的每个元素执行(〜/ Views / Shared / EditorTemplates / Groupviewmodel.cshtml):
@model Groupviewmodel <tr> <td> @Html.RadioButtonFor(x => x.CheckerApproved,"true") <span>Approved</span> @Html.RadioButtonFor(x => x.CheckerApproved,"false") <span>Not approved</span> </td> </tr>
现在不仅您不再需要在视图中编写任何丑陋的foreach循环,而且最终会得到正确的命名约定.