在MVC 5.1中使用新的Html.EnumDropDownListFor
扩展方法时,我遇到了一个问题,即所选值不会根据路由属性I'而在下拉列表中进行更新。 m传递给我的控制器动作。
查看
@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
属性,则在渲染时下拉列表不会更新为属性值 - 即使我已经确认该属性的值不是默认的枚举值。
答案 0 :(得分: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});
}
答案 1 :(得分:0)
你应该试试这个: 使用Html.DropdownlistFor
@Html.DropDownListFor(m => m.Environment, Enum.GetValues(typeof(YourEnumType)).Cast<YourEnumType>().Select(x => new SelectListItem { Text = x.ToString(), Value = ((int)x).ToString() }))
答案 2 :(得分:0)
我遇到过类似的错误。在我的情况下,我需要通过动作链接传递枚举值,如下所示(不工作):
enum GroupByDate {
Day, Month
}
class IndexViewModel {
GroupByDate GroupByDate;
}
<a href="@Url.Action("Index", new IndexViewModel { GroupByDate = DateGroup.Month})">...</a>
因为控制器将枚举绑定到int,所以需要将其作为整数传递,因此我将视图更改为next(working):
<a href="@Url.Action("Index", new { GroupByDate = (int) DateGroup.Month})">...</a>
请注意,该路由值不再是类型化的ViewModel,而是匿名类型。