Razor foreach循环丢失项目属性

时间:2015-06-16 00:53:53

标签: c# asp.net-mvc razor

我正在根据模型中的选择列表创建动态单选按钮组。当我将模型传递给视图时,我希望它根据选择列表的选定属性选择单选按钮。 以下是我在视图中的内容:

@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

我不确定我做错了什么,或者如何将所选属性映射到项目以便在循环中使用。

感谢。

1 个答案:

答案 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>元素