2014-11-23 120 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> 
關聯