我使用@Html.EnumDropDownListFor()
显示我的枚举的下拉列表。我想将所选值设置为其中一个枚举值。 The question asked here与我在这里提出的问题非常相似,但答案在那里提供,不在我的案例中工作。
到目前为止我尝试过:
public enum Region
{
Europe = 0,
NorthAmerica = 1,
Korea = 2,
China = 3,
Taiwan = 4
}
(其中我设置了我的枚举值)
public ActionResult Index(Region region = Region.Europe)
{
var model = new RealmViewModel();
model.Realms = realmService.GetAllRealmsByRegion(region);
model.Region = region;
return View(model);
}
public class RealmViewModel
{
public IEnumerable<Realm> Realms { get; set; }
public Region Region { get; set; }
}
(我将枚举显示为下拉列表,并希望设置所选值)
@model RealmViewModel
<div class="form-group">
<label for="region-input">Region</label>
@Html.EnumDropDownListFor(model => model.Region, new { @class = "form-control", @id = "region-input" })
</div>
在渲染视图中,下拉列表始终设置在第一个枚举值上,即Europe
。即使我使用Index()
以外的域调用Europe
操作,并且调试器显示Model.Region
确实是某些其他值,例如Korea
,也会再次下拉显示已选中Europe
。基于other question,因为我在控制器model.Region
操作中设置了index
值,然后@Html.EnumDropDownListFor()
应该选择 枚举值作为默认值,但由于某种原因,它在我的情况下不起作用。
为什么我不能这样设置EnumDropDownListFor选定值?
我正在调用控制器动作,如下所示:
/Home/Index?region=Korea
@ Ric的回答建议将操作称为:/Home/Index?region=2
然后它按预期工作。所以真正的问题应该是:当我通过枚举的字符串值调用动作时它为什么不起作用,但只有当我通过枚举的整数值调用动作时它才起作用? / p>
我调试了两种调用方法,我可以说两种方法中的所有值都是相同的。所以我不明白为什么第一个没有按预期工作。
答案 0 :(得分:1)
使用以下作为网址:
/Home/Index?region=1
枚举确实会改变NorthAmerica的值,并在视图中正确显示。
如果您添加了新路线:
routes.MapRoute(
name: "DefaultRegion",
url: "{controller}/{action}/{region}",
defaults: new { controller = "Home", action = "Index", region = UrlParameter.Optional }
);
然后使用:
/Home/Index/3
下拉列表显示中国。
查看代码:
@Html.EnumDropDownListFor(model => model.Region)