2

MVC 5.1 で新しいHtml.EnumDropDownListFor拡張メソッドを使用すると、コントローラー アクションに渡すルート属性に基づいて、選択した値がドロップダウンで更新されないという問題が発生します。

意見

@model MemberReconWebDemo.Models.EnvironmentsModel
@{
    ViewBag.Title = "Environments";
}

<h2>Environments</h2>
<div class="row">
    <div class="col-md-12">
        @Html.EnumDropDownListFor(p => p.Environment)
        @Model.Environment.ToString()
    </div>
</div>

コントローラ アクション

[Route("environments/{environment?}")]
public ActionResult Environments(string environment)
{
    Domain.Environment env;
    Enum.TryParse(environment, true, out env);

    return View(new EnvironmentsModel{Environment = env});
}

オプションの属性なしでルートに移動しModel.Environment、コントローラー アクションでプロパティを静的な値に設定すると、選択した値は問題なく表示されます。

有効なルート属性値を渡し、それをModel.Environmentプロパティに割り当てた場合、レンダリング時にドロップダウンがプロパティ値に更新されません。プロパティにデフォルトの列挙値以外の値があることを確認したにもかかわらずです。 .

4

3 に答える 3

6

私も今日この問題に遭遇しました。routes パラメータの名前を models プロパティとは異なる名前に変更するとうまくいきました。

コントローラ アクション

[Route("environments/{envparm?}")]
public ActionResult Environments(string envparam)
{
    Domain.Environment env;
    Enum.TryParse(envparam, true, out env);

    return View(new EnvironmentsModel{Environment = env});
}
于 2014-05-06T17:06:49.577 に答える
1

これを試す必要があります: use Html.DropdownlistFor

     @Html.DropDownListFor(m => m.Environment, Enum.GetValues(typeof(YourEnumType)).Cast<YourEnumType>().Select(x => new SelectListItem { Text = x.ToString(), Value = ((int)x).ToString() }))
于 2014-04-07T12:57:13.287 に答える