Razor:如何从 IEnumerable<string> ViewBag 属性 创建下拉菜单?
Razor: How to create a dropdown out of an IEnumerable<string> ViewBag property?
我有以下渲染视图:
public ActionResult CreateAlta()
{
ViewBag.RolesApp = new SQLRolerecord().GetAllRolesInApp();
return View();
}
如何从 ViewBag 属性 RolesApp 生成下拉菜单? GetAllRolesInApp()
returns 和 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>
但是这会产生一个错误,指出 DropDownListFor
在 HtmlHelper 中不存在。
谢谢。
您正在尝试使用 DropDownListFor
,但这需要您有一个视图模型和一个附加到它的 属性(使用 lambda)。我认为您正在寻找 DropDownList
@Html.DropDownList("iroleeid",
new SelectList(ViewBag.RolesApp),
"--Select Role of User--",
new { @class = "form-control" })
将您的 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% 工作,目前无法编译。
您可以将字符串列表转换为 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"
。如果您希望它们具有不同的名称,请使用此重载。
@Html.DropDownList("SelectedRole",ViewBag.Roles as List<SelectListItem>)
这将创建一个名称和 ID 属性 值设置为 "SelectedRole"
的下拉列表
由于我们将 SelectListItem
对象的值和文本设置为相同的字符串值,因此您的 select 元素选项值和文本将相同
我有以下渲染视图:
public ActionResult CreateAlta()
{
ViewBag.RolesApp = new SQLRolerecord().GetAllRolesInApp();
return View();
}
如何从 ViewBag 属性 RolesApp 生成下拉菜单? GetAllRolesInApp()
returns 和 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>
但是这会产生一个错误,指出 DropDownListFor
在 HtmlHelper 中不存在。
谢谢。
您正在尝试使用 DropDownListFor
,但这需要您有一个视图模型和一个附加到它的 属性(使用 lambda)。我认为您正在寻找 DropDownList
@Html.DropDownList("iroleeid",
new SelectList(ViewBag.RolesApp),
"--Select Role of User--",
new { @class = "form-control" })
将您的 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% 工作,目前无法编译。
您可以将字符串列表转换为 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"
。如果您希望它们具有不同的名称,请使用此重载。
@Html.DropDownList("SelectedRole",ViewBag.Roles as List<SelectListItem>)
这将创建一个名称和 ID 属性 值设置为 "SelectedRole"
由于我们将 SelectListItem
对象的值和文本设置为相同的字符串值,因此您的 select 元素选项值和文本将相同