2016-09-20 64 views
0

我在剃刀以下声明:下拉列表中的Razor默认选择?

@Html.DropDownList("SelectedRole", ViewBag.RolesEdit as List<SelectListItem>, ViewBag.CurrentUserRole as string, new { @class = "form-control" }),这导致下拉,看起来在页面加载如下:

enter image description here

当我点击下拉箭头,我看到:

enter image description here

所以基本上,用户角色是重复的。我怎样才能改变这一点,以便它不是创建一个新的重复元素,而是默认它应该是的元素?基本上,因为ViewBag.RolesEdit是一个列表,并且ViewBag.CurrentUserRole保证有一个元素等于上述列表中的一个项目,我如何循环访问列表来比较对方并设置默认值?

谢谢。

+0

你可能想看看这个【答案】(HTTP: //stackoverflow.com/a/37819577/296861)。 – Win

+0

将CurrentUserRole设置为文本RegularUser还是设置为对应于RegularUser的值? –

+0

@ stephen.vakil它被设置为控制器中的'text',如下所示:'ViewBag.CurrentUserRole = user.UserRole();''user'是Identity框架中的一种用户类型。 – ITWorker

回答

1

当使用Html.DropDownList helper方法,要设置一个选项,以预先选定的,你只需要设置该选项所涉及的ViewBag字典,用于生成SELECT元素相同的密钥的

@Html.DropDownList("SelectedRole", ViewBag.RolesEdit as List<SelectListItem>) 

假设你的操作方法是设置ViewBag.SelectedRole您要选择该选项的value

ViewBag.RolesEdit= new List<SelectListItem>{  
    new SelectListItem { Value="Administrator", Text="Administrator"}, 
    new SelectListItem { Value="Employees", Text="Employees"}, 
    new SelectListItem { Value="RegularUser", Text="Regular User"}, 
} 
ViewBag.SelectedRole ="RegularUser"; 
return View(); 

如果你喜欢使用Html.DropDownListFor helper方法有一个强类型的视图,视图模型,你可以按照这个帖子

What is the best ways to bind @Html.DropDownListFor in ASP.NET MVC5?

+0

谢谢,这工作。我用'ViewBag.SelectedRole = user.UserRole();'而不是像你的答案那样硬编码。 – ITWorker