我有以下内容来渲染视图:
public ActionResult CreateAlta()
{
ViewBag.RolesApp = new SQLRolerecord().GetAllRolesInApp();
return View();
}
如何从ViewBag属性RolesApp生成下拉菜单? GetAllRolesInApp()
返回IEnumerable<string>
,我的尝试如下:
<div class="form-group">
<label class="col-sm-2 control-label">Role: </label>
<div class="col-sm-4">
@Html.DropDownListFor("iroleeid", ViewBag.RolesApp, "--Select Role of User--");
</div>
</div>
然而,这会产生错误,说HtmlHelper中不存在DropDownListFor
。
谢谢。
答案 0 :(得分:2)
您正在尝试使用DropDownListFor
,但希望您拥有一个视图模型和附加到该属性的属性(使用lambda)。我认为您正在寻找DropDownList
@Html.DropDownList("iroleeid",
new SelectList(ViewBag.RolesApp),
"--Select Role of User--",
new { @class = "form-control" })
答案 1 :(得分:2)
您可以将字符串列表转换为SelectListItem
的
var roles = new SQLRolerecord().GetAllRolesInApp()
.Select(f=>new SelectListItem { Value=f, Text = f}).ToList();
ViewBag.Roles= roles ;
现在在您看来,您可以使用DropDownList
辅助方法。
@Html.DropDownList("Roles")
这将生成一个select name
和id
属性值设置为"Roles"
的select元素。如果您希望这些名称不同,请使用此重载。
@Html.DropDownList("SelectedRole",ViewBag.Roles as List<SelectListItem>)
这将创建一个名称和ID属性值设置为"SelectedRole"
由于我们将SelectListItem
对象的值和文本设置为相同的字符串值,因此您的选择元素选项值和文本将相同
答案 2 :(得分:1)
将您的IENumerable<Role>
转换为SelectList
。
控制器:
var selectList = new SqlRoleRecord().GetAllRolesInApp().Select(x => new SelectListItem { Value = x.Id, Text = x.Name }).ToList();
ViewBag.RolesApp = selectList;
查看:
@Html.DropDownListFor(x => x.SelectedRoleId, ViewBag.RolesApp, Model.SelectedRoleId)
可选:
当您添加用于将SelectedRoleId存储到模型的属性时,您可以稍后在控制器中使用它。例如,当您需要将角色绑定到数据库中的用户时很有用。
P.S。不确定100%是否正常工作,此时无法编译。