4 c# radio-button razor asp.net-mvc-4
我使用@Html.RadioButtonFor扩展方法有一个奇怪的行为.我正在使用foreach循环来创建RadioButton和By三元运算符列表.我试图设置一个尊重条件的人来检查,但它总是最后一个被检查.我搜索了类似的问题,但我不确定是否找到了什么.而且我不想创建/使用自定义RadioButtonList.
在我的视图中我的代码:
@foreach (var item in Model.Entities)
{
<div>
@Html.RadioButtonFor(m => item.Default, item.EntityId,
new { @checked = item.Default ? "checked" : "" })//item.Default is a bool and there is only one set to True
</div>
}
Run Code Online (Sandbox Code Playgroud)
但在我的浏览器中,它始终是最后创建的,checked即使item.Default是false.那有什么东西
如果该checked属性存在(无论它的实际值是什么),浏览器会将该按钮视为已选中.这是HTML5行为.我猜所有的radiobuttons都checked定义了属性,浏览器会选择最后一个按钮作为最终选择的按钮.
我的解决方案是创建一个自定义的RadioButtonFor扩展方法,它接受一个检查状态的布尔值,并根据值将checked属性添加到htmlAttributes字典.像这样的东西:
public static MvcHtmlString RadioButtonFor<TModel, TValue>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TValue>> expression, object value, object htmlAttributes, bool checkedState)
{
var htmlAttributeDictionary = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
if (checkedState)
{
htmlAttributeDictionary.Add("checked", "checked");
}
return htmlHelper.RadioButtonFor(expression, value, htmlAttributeDictionary);
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以在视图中使用该方法(不要忘记添加创建扩展方法的命名空间并将其放在配置中),如下所示:
@foreach (var item in Model.Entities)
{
<div>
@Html.RadioButtonFor(m => item.Default, item.EntityId, new { /* other attributes go here */ }, item.Default)
</div>
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3393 次 |
| 最近记录: |