ASP.net MVC SelectList已归档所有角色

时间:2014-06-11 11:07:44

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我正在尝试将所有角色从我的数据库中添加到选择列表中。 这是我的控制器:

[AllowAnonymous]
public ActionResult Register()
{
    ViewBag.Roles = new SelectList(Roles.GetAllRoles(), "ROLEID", "ROLENAME");
    return View();
}

我的模特:

public List<SelectListItem> SelectedRoles { set; get; }

这是我的观点:

<div class="input-group">
   <label for="Centre">Roles(s)</label>
   @Html.ListBoxFor(m=>m.SelectedRoles, (ViewBag.Roles as SelectList), new { @class = "chosen-select", data_placeholder = "Agent(s)." })
   @Html.ValidationMessageFor(m=>m.SelectedRoles)
</div>

但是我收到了这个错误:

  

没有“IEnumerable”类型的ViewData项具有“SelectedRoles”键。

有什么问题?

3 个答案:

答案 0 :(得分:1)

确定。我忘记了一件事,将ListBoxFor替换为ListBox,如下所示:

ViewBag.ListRoles = new SelectList(Roles.GetAllRoles(), "Id", "Name");

@Html.ListBox("SelectedRoles", (SelectList)ViewBag.ListRoles)

确保名称与ViewBag不相似

修改

这不是更好的方式,但我认为有效。放入内部视图:

<select>
@foreach (var item in Roles.GetAllRoles())
{
    <option value="@item">@item</option>
}
</select>

答案 1 :(得分:1)

@Html.ListBoxFor(m=>m.SelectedRoles, (ViewBag.Roles as SelectList), new { @class = "chosen-select", data_placeholder = "Agent(s)." })

将上一行更改为

@Html.ListBoxFor(m=>m.ROLEID, (ViewBag.Roles as SelectList), new { @class = "chosen-select", data_placeholder = "Agent(s)." })

答案 2 :(得分:0)

我解决了这样的问题:
在控制器中:

 ViewBag.AllRoles = new SelectList(Roles.GetAllRoles(), "roleName");

并在我的视图中:

@Html.ListBoxFor(m=>m.SelectedRoles, (ViewBag.AllRoles as SelectList), new { @class = "chosen-select", data_placeholder = "Agent(s)." })

此链接非常有用{{3p>