您可以通过使用DropDownlistFor()
的overloads一个接受optionLabel
之一来添加null
选项的下拉列表,例如
@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"
,否则他们选择了一个特定的选项。
您可以使用[重载](https://msdn.microsoft.com/en-us/library/system.web.mvc.html.selectextensions)之一添加'“--Select - ”'选项.dropdownlistfor(v = vs.118)的.aspx#L:System.Web.Mvc.Html.SelectExtensions.DropDownListFor''2%28System.Web.Mvc.HtmlHelper {''0},{System.Linq.Expressions.Expression (DropDownListFor())接受'optionLabel'的System.Func {''0,''1}},System.Collections.Generic.IEnumerable {System.Web.Mvc.SelectListItem},System.String%29)。但是,添加'ALL'没有任何意义 - 它将如何绑定到属性int' –
我已经尝试使用@ Html.DropDownListFor(model => model.EmpId,new SelectList(@ ViewBag.test,“Id”, “Name”),“ALL” 新{@class =“form-control”,id =“ddlEmp”})..但它不工作.. – KaviSuja
什么不起作用?该代码将生成第一个选项为“'但是选择它会返回'null'值,这意味着'ModelState'将会失效。它只有在你使用'“ - 选择 - ”时才有意义 - “' –