Html.EnumDropDownList表示未将属性值显示为已选中

Jas*_*ano 2 asp.net asp.net-mvc razor asp.net-mvc-5 asp.net-mvc-5.1

Html.EnumDropDownListForMVC 5.1中使用新的扩展方法时,我遇到的问题是,根据我传递给控制器​​操作的路由属性,下拉列表中的所选值没有更新.

视图

@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>
Run Code Online (Sandbox Code Playgroud)

控制器动作

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

    return View(new EnvironmentsModel{Environment = env});
}
Run Code Online (Sandbox Code Playgroud)

如果我导航到没有可选属性的路由,并且我Model.Environment在控制器操作中将属性设置为静态值,则该选定值显示没有问题.

如果我传入一个有效的路由属性值,将其分配给Model.Environment属性,则在呈现时下拉列表不会更新为属性值 - 即使我已确认该属性的值不是默认的枚举值.

小智 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});
}
Run Code Online (Sandbox Code Playgroud)

  • 我遇到了同样的问题,正如@falseidols建议的那样,如果我的变量名称不同,我发现问题就消失了.我有一个名为UserTitle的枚举和一个名为Title的ViewModel属性.这没有约束力.但是,如果我将属性重命名为名称中没有User或Title的任何其他属性,那么它将按预期绑定. (2认同)