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"

почему атрибут "checked" автоматически добавляется MVC framework? Спасибо.

модель:

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 ответов


его выбрали, потому что значение вашей собственности Status is OrderStausType.Waiting (вот как работает привязка!).

удалить new {@checked = true} С @Html.RadioButtonFor() метод и в вашем контроллере установите значение Status to OrderStausType.Shipped прежде чем передать его в вид.

Заметим также, вы должны использовать <label> элемент а, что а <span> чтобы связать метку с переключателем

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