web-dev-qa-db-ja.com

MVC 5 RadioButton列挙型では、デフォルトの列挙値ゼロが常に選択されていますか?

列挙型があるとしましょう:

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フレームワークによって自動的に追加されるのはなぜですか?ありがとう。

モデル:

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>
12
user4143172

これは、プロパティStatusの値が_OrderStausType.Waiting_であるために選択されました(バインディングが機能する方法です!)。

ビューに渡す前に、@Html.RadioButtonFor()メソッドから_new {@checked = true}_を削除し、コントローラーでStatusの値を_OrderStausType.Shipped_に設定します。

また、ラベルをラジオボタンに関連付けるには、_<label>_ではなく_<span>_要素を使用する必要があります。

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