我正在根据模型中的选择列表创建动态单选按钮组。当我将模型传递给视图时,我希望它根据选择列表的选定属性选择单选按钮。 以下是我在视图中的内容:
@foreach (var item in Model.RadioGroup)
{
@Html.RadioButtonFor(model => model.RadioSelection, item.Value, new { @checked = item.Selected })
<label class="control-label">@item.Text</label>
}
每次导航到页面时,无论控制器中的属性设置如何,都会选择最后一个单选按钮。
我在视图中设置了断点,Model.RadioGroup
列表中的所有单选按钮都正确,正确的单选按钮的选择属性为true,但当该项出现在循环中并转移到item
对象item
获取所有其他属性(值和文本),但将selected
属性设置为false
。
我不确定我做错了什么,或者如何将所选属性映射到项目以便在循环中使用。
感谢。
答案 0 :(得分:0)
因为您使用new { @checked = item.Selected }
表示您设置checked
属性。 checked="checked"
或checked="true"
或checked="anyValueWhatSoEver"
都导致设置checked
属性(尽管只有第一个是有效的html)。
因此,在加载DOM时,会设置第一个单选按钮的checked
属性。在下一次迭代中,设置第二个checked
属性(并从第一个中删除,因为组中只有一个单选按钮可以是checked
)。
由于您使用@Html.RadioButtonFor()
绑定到属性RadioSelection
,因此在将模型传递给视图之前,需要在控制器中设置RadioSelection
的值。如果该值与您的某个项目匹配,则会选择该按钮(并从帮助程序中删除new { @checked = item.Selected }
)。
附注:您还应该考虑为单选按钮提供唯一的id
属性并使用<label for="theID" ..>
(或者只是将帮助程序包装在<label>
元素中,以便它充当标签(即点击它将焦点设置为相关的单选按钮) - 目前什么也没做,真的应该只是一个<span>
元素