代码之家  ›  专栏  ›  技术社区  ›  KaviSuja

使用ViewBag在下拉列表绑定中包含“ALL”选项

  •  0
  • KaviSuja  · 技术社区  · 8 年前

    我从控制器通过Viewbag绑定了视图中的下拉列表,如下所示:

    ViewBag.test = from p in _userRegisterViewModel.GetEmpPrimary().ToList().Where(a => a.UserType_id != Convert.ToInt32(Session["loginUserType"].ToString()))
                               select new
                               {
                    Id = p.EmpId,
                    Name =  p.First_Name.Trim() + " " + p.Last_Name.Trim()
                };
    

    鉴于此,我已绑定如下:

    @Html.DropDownListFor(model => model.EmpId, new SelectList(@ViewBag.test, "Id", "Name"),
                            new { @class = "form-control", id="ddlEmp" })
    

    现在我想在这个下拉列表中插入“全部”和“--选择--”。。 有人能帮我做这件事吗。。 提前谢谢。。

    1 回复  |  直到 8 年前
        1
  •  1
  •   user3559349 user3559349    8 年前

    您可以添加 null 通过使用 overloads 属于 DropDownlistFor() 接受 optionLabel 例如

    @Html.DropDownListFor(m => m.EmpId, new SelectList(@ViewBag.test, "Id", "Name"), "--select--", new { @class = "form-control", id="ddlEmp" })
    

    这将生成第一个选项 <option value="">--select--</option>

    但是,如果您想同时包含两个选项 "--select--" "ALL" 你需要生成自己的 IEnumerable<SelectListItem> 并将其传递给视图。我建议将视图模型与 IEnumerable<选择列表项> 属性,但使用 ViewBag ,控制器中的代码为

    List<SelectListItem> options = _userRegisterViewModel.GetEmpPrimary()
        .Where(a => a.UserType_id != Convert.ToInt32(Session["loginUserType"].ToString()))
        .Select(a => new SelectListItem
        {
            Value = a.EmpId.ToString(),
            Text = a.First_Name.Trim() + " " + a.Last_Name.Trim()
        }).ToList();
    // add the 'ALL' option
    options.Add(new SelectListItem(){ Value = "-1", Text = "ALL" });
    ViewBag.test = options;
    

    请注意,我已经给出了 ALL 选项的值 -1 假设你的 EmpId 值将为 -1

    然后在视图中,生成下拉列表的代码将是

     @Html.DropDownListFor(m => m.EmpId, (Ienumerable<SelectListItem>)ViewBag.test, "--select--", new { @class = "form-control" })
    

    不确定为什么要更改 id 属性来自 id="EmpId" id="ddlEmp" ?

    然后在POST方法中,首先检查 ModelState 无效(如果用户选择 “--选择--” 选项,值为 无效的 将被发布,模型将无效),因此返回视图(不要忘记重新分配 ViewBag.test 属性)。

    如果 模型状态 有效,则检查的值 model.EmpId 。如果 -1 ,然后用户选择 “全部” ,否则他们选择了特定选项。