在ASP.NET MVC 5中设置EnumDropDownListFor的选定值

时间:2016-01-11 14:48:32

标签: asp.net-mvc-5 html-helper

我使用@Html.EnumDropDownListFor()显示我的枚举的下拉列表。我想将所选值设置为其中一个枚举值。 The question asked here与我在这里提出的问题非常相似,但答案在那里提供,在我的案例中工作。

到目前为止我尝试过:

Enum:

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>

我调试了两种调用方法,我可以说两种方法中的所有值都是相同的。所以我不明白为什么第一个没有按预期工作。

1 个答案:

答案 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)