我需要渲染一个DropDown列表,我不想将列表的值作为模型的一部分传递给View。
基本上我正在尝试做的事情看起来像那样:
@{
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();
}
当然那不行。我该怎么做?
答案 0 :(得分: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是“东西”的动态类型持有者,你几乎可以在那里粘贴任何东西。 :)这意味着将事物传递给不属于模型的视图。