您可以添加
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
,然后用户选择
“全部”
,否则他们选择了特定选项。