「DropDownListFor」タグアーカイブ

【C#】Asp.net MVCのハマりポイント

Asp.net でRazorを使っているといつもハマってしまうトラップポイントがありますので忘れないようにまとめておきます。

EditorForヘルパーについて

EditorForヘルパーは、HTML属性が反映されない。例えば以下のように書いても非活性になりません。その場合はためらわずTextBoxForなどの個別のヘルパーを使用します。placeholderや、Readonlyも同様です。

@Html.EditorFor(model => model.StoreName, new { @disabled = "disabled" })

以下のように書きます。

@Html.TextBoxFor(model => model.StoreName, new { @disabled = "disabled" })

DropDownListがselectedにならない

DropDownListForは、Modelとバインドした場合、第2引数のSelectListItemの値とModelの値が合致した場合、selectedに自動でしてくれる仕様があるのですが、ならない場合があります。
詳しく調べたわけではないのですが、どうも型が合っていないと一致とみなしてくれないようです。その場合の対処法としては、ViewModelの型を変更して合わせるか、.chtml内で再度SelectListItemをnewして、Modelの値と一致したらselectedを設定してあげるという技があります。

@Html.DropDownListFor(
    model => model.PrefectureCode,
    Model.PrefectureOptions,
    "都道府県を選択してください",
    new { @class = "title_list"}
)
@Html.DropDownListFor(
    model => model.PrefectureCode,
    Model.PrefectureOptions
    .Select(x => new SelectListItem()
                {
                    Value = x.Value,
                    Text = x.Text,
                    Selected = x.Value == Model.PrefectureCode
                }),
    "都道府県を選択してください",
    new { @class = "title_list"}
)