Razor:如何从IEnumerable <string> ViewBag属性创建一个下拉列表?

时间:2016-08-30 19:52:51

标签: c# asp.net-mvc razor viewbag

我有以下内容来渲染视图:

 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

谢谢。

3 个答案:

答案 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 nameid属性值设置为"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%是否正常工作,此时无法编译。