MVC 5的RadioButtonFor枚举,为什么默认枚举值零总是被选中?

13

假设我有一个枚举:

public enum OrderStatusType
{
    Waiting = 0,
    Pending,
    Picked,
    Shipped,        
}

我按照以下方式生成了单选按钮列表。

@Html.RadioButtonFor(m => m.Status, OrderStatusType.Shipped, new {@checked = true})
@Html.RadioButtonFor(m => m.Status, OrderStatusType.Waiting)

但是等待总是被选择。输出的 HTML 如下:

input type="radio" value="Shipped" name="Status" id="Status" checked="True"
input type="radio" value="Waiting" name="Status" id="Status" checked="checked"

为什么MVC框架会自动添加"checked"属性?谢谢。

模型:

public class OrderViewModel
{
    public OrderStatusType Status { get; set; }
}

视图:

@using WebApplication17.Controllers
@model WebApplication17.Models.OrderViewModel

@{
    ViewBag.Title = "Home Page";
}


@Html.RadioButtonFor(m => m.Status, OrderStatusType.Picked)
<span>@OrderStatusType.Picked</span>

@Html.RadioButtonFor(m=>m.Status, OrderStatusType.Pending)
<span>@OrderStatusType.Pending</span>

@Html.RadioButtonFor(m => m.Status, OrderStatusType.Shipped, new {@checked = true})
<span>@OrderStatusType.Shipped</span>

@Html.RadioButtonFor(m => m.Status, OrderStatusType.Waiting)
<span>@OrderStatusType.Waiting</span>
1个回答

25

它被选中是因为您的属性Status的值为OrderStausType.Waiting(这就是绑定的工作方式!)。

@Html.RadioButtonFor()方法中删除new {@checked = true},并在控制器中将Status的值设置为OrderStausType.Shipped,然后再将其传递给视图。

还要注意,您应该使用<label>元素而不是<span>来将标签与单选按钮关联起来。

@Html.RadioButtonFor(m => m.Status, OrderStausType.Picked, new {id = OrderStausType.Picked)
<label for=@OrderStausType.Picked>@OrderStausType.Picked</label>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接