0

我需要渲染一个下拉列表,我不想将列表的值作为模型的一部分传递给视图。

基本上我想做的事情是这样的:

@{
     var roles = Html.Action("GetRoles");
     var selectList = from r in roles select new SelectListItem
                     {
                         Selected = (r.Id == Model.DefaultRole.Id),
                         Text = r.RoleName,
                         Value = r.Id.ToString(),
                     };
  }
  @Html.DropDownList("roles", selectList)
  @Html.ValidationMessageFor(m => m.DefaultRole)

以及动作方法

  public List<aspnet_Role> GetRoles()
  {
        return _dataContext.GetAspnetRoles();
  }

这当然行不通。我该怎么做?

4

1 回答 1

1

把它放在 ViewBag 中。在您的控制器中,您可以这样做:

ViewBag.selectList = from r in roles select new SelectListItem
                 {
                     Selected = (r.Id == Model.DefaultRole.Id),
                     Text = r.RoleName,
                     Value = r.Id.ToString(),
                 };

然后在您的视图中只需将您的 DropDownList 更改为:

@Html.DropDownList("roles", ViewBag.selectList)

ViewBag 是一个动态类型的“东西”持有者,你可以在里面粘贴几乎任何东西。:) 它旨在将不属于模型的内容传递给视图。

于 2011-06-01T16:56:11.703 回答