使用ViewBag在dropdownlist bind中包含“ALL”选项

时间:2016-02-09 07:58:10

标签: asp.net-mvc html.dropdownlistfor viewbag

我已经通过Viewbag从控制器绑定了下拉列表,如下所示:

var img = $("#_img");
img.on("click", function(event){
    var x = event.pageX - this.offsetLeft;
    var y = event.pageY - this.offsetTop;
    var left = 'calc(' + ((x / img.width()) * 100) + '% - 5px)';
    var right = 'calc(' + ((y / img.height()) * 100) + '% - 5px)';
    $("#marker").css({
        "left": left,
        "right": right 
    }).show();
});

在视图中我绑定如下:

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()
            };

现在我想在此下拉列表中插入“ALL”和“--Select--”..我怎么能这样做.. 任何人都可以帮我这样做.. 提前谢谢..

1 个答案:

答案 0 :(得分:1)

您可以使用接受null的{​​{1}} 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<SelectListItem>属性的视图模型作为选项,但使用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是否无效(如果用户选择了"--select--"选项,将发布null的值并且模型将无效) ,所以返回视图(不要忘记重新分配ViewBag.test属性)。

如果ModelState有效,请检查model.EmpId的值。如果是-1,则用户选择"ALL",否则他们会选择特定选项。