Asp.net Html.EnumDropDownList用于不显示选定的属性值

Asp.net Html.EnumDropDownList用于不显示选定的属性值,asp.net,asp.net-mvc,razor,asp.net-mvc-5,asp.net-mvc-5.1,Asp.net,Asp.net Mvc,Razor,Asp.net Mvc 5,Asp.net Mvc 5.1,在MVC 5.1中使用新的Html.EnumDropDownListFor扩展方法时,我遇到了一个问题,即所选值没有根据传递给控制器操作的路由属性在下拉列表中更新 查看 @model MemberReconWebDemo.Models.EnvironmentsModel @{ ViewBag.Title = "Environments"; } <h2>Environments</h2> <div class="row"> <div cl

在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>
如果我导航到不带可选属性的路线,并且在控制器操作中将
Model.Environment
属性设置为静态值,则所选值将显示为无问题


如果我传入了有效的路由属性值,请将其指定给
Model.Environment
属性,则在呈现时下拉列表不会更新为属性值--即使我已确认该属性确实具有默认枚举值以外的值。

您应该尝试以下操作: 使用Html.DropdownlistFor

     @Html.DropDownListFor(m => m.Environment, Enum.GetValues(typeof(YourEnumType)).Cast<YourEnumType>().Select(x => new SelectListItem { Text = x.ToString(), Value = ((int)x).ToString() }))
@Html.DropDownListFor(m=>m.Environment,Enum.GetValues(typeof(YourEnumType)).Cast().Select(x=>newselectListItem{Text=x.ToString(),Value=((int)x.ToString())

我今天也遇到了这个问题。将routes参数重命名为不同于models属性的名称对我很有效

控制器动作

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

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

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

我也经历过类似的错误。在我的情况下,我需要通过操作链接传递枚举值,如下所示(不工作):

enum GroupByDate{
日月
}
类索引模型{
GroupByDate GroupByDate;
}
因为控制器将enum绑定到int,您需要将其作为整数传递,所以我将视图更改为next(工作):



请注意,路由值不再是类型化的ViewModel,而是匿名类型。

为了检查modelstate是否不起作用,您检查了环境是否在modelstate中有值。这有时可能会导致问题,尤其是在POST中,etcModelState在渲染时确实有一个值,但未正确设置下拉选择值。我在下面使用了@user2086074的建议,这就像gangbusters一样有效,因此我们可以安全地排除ModelState。您的建议有效,但我试图找出为什么EnumDropDownListFor功能不能按预期工作,而不是如何从enum值的下拉列表中删除。我也遇到了同样的问题,正如@falseidols所暗示的,我发现如果变量名不同,问题就消失了。我有一个名为UserTitle的枚举和一个名为Title的ViewModel属性。这没有约束力。但是,如果我将属性重命名为其他名称中没有用户或标题的名称,那么它将按预期绑定。这也是我的问题所在。我的动作参数名为
region
,模型属性名为
region
。我将action参数更改为
regionParam
,它现在按预期工作。谢谢你,虚假偶像。
enum GroupByDate {
    Day, Month
}
class IndexViewModel {
    GroupByDate GroupByDate;
}

<a href="@Url.Action("Index", new IndexViewModel { GroupByDate = DateGroup.Month})">...</a>
 <a href="@Url.Action("Index", new { GroupByDate = (int) DateGroup.Month})">...</a>