2014-11-23 113 views
10

说我有一个枚举:MVC 5 RadioButtonFor枚举,默认的枚举值零总是被选中?

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; } 
} 

的观点:(!这是怎么绑定工作)来选择,因为你的财产Status的值是OrderStausType.Waiting

@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> 

回答

17

它。

@Html.RadioButtonFor()方法和控制器删除new {@checked = true},设置StatusOrderStausType.Shipped的价值,你把它传递给视图前。

还请注意,你应该使用<label>元素,而一个<span>将标签与单选按钮

@Html.RadioButtonFor(m => m.Status, OrderStausType.Picked, new {id = OrderStausType.Picked) 
<label [email protected]>@OrderStausType.Picked</label> 
关联