2014-11-23 9 views
10

Sagen, ich habe eine Enumeration:MVC 5 RadioButtonFür enum wird immer der Standardaufzählungswert Null ausgewählt?

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

ich das Optionsfeld Liste wie folgt erzeugt.

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

Aber das Warten ist immer ausgewählt. Die Ausgabe HTML ist wie folgt:

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

Warum wird "checked" automatisch von MVC-Framework hinzugefügt Attribut? Danke.

Das Modell:

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

Aussicht: (! Das ist, wie verbindlich Werke)

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

Antwort

17

Sein ausgewählt, weil der Wert Ihrer Immobilie Status ist OrderStausType.Waiting.

new {@checked = true} vom @Html.RadioButtonFor() Methode entfernen und in Ihrem Controller, um den Wert von Status-OrderStausType.Shipped festlegen, bevor Sie es an die Ansicht übergeben.

Beachten Sie auch, sollten Sie ein <label> Element verwenden vielmehr, dass ein <span> das Etikett mit dem Optionsfeld zuzuordnen

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