2014-11-23 20 views
10

Dire che ho un enum:MVC 5 RadioButton Per enum, il valore di enum predefinito è sempre selezionato?

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

ho generato la lista pulsante di opzione come segue.

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

Ma l'attesa è sempre selezionata. L'HTML di output è il seguente:

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

Perché un attributo "checked" viene automaticamente aggiunto dal framework MVC? Grazie.

Il modello:

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

Il punto di vista: (! Ecco come funziona vincolanti)

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

risposta

17

Il suo selezionato perché il valore della vostra proprietà Status è OrderStausType.Waiting.

Rimuovere new {@checked = true} dal metodo @Html.RadioButtonFor() e nel controller, impostare il valore di Status-OrderStausType.Shipped prima di passare alla vista.

Si noti inoltre che si dovrebbe usare un elemento <label> piuttosto che un <span> per associare l'etichetta con il pulsante di opzione

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