2016-02-09 32 views
0

我已经鉴于下拉列表由Viewbag从控制器绑定为以下“全部”选项:包括在下拉列表绑定使用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" }) 

现在我想插入“所有”和“ - 选择 - ”在此下拉列表中..我怎么能做到这一点.. 任何人都可以帮助我做到这一点.. 在此先感谢..

+0

您可以使用[重载](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' –

+0

我已经尝试使用@ Html.DropDownListFor(model => model.EmpId,new SelectList(@ ViewBag.test,“Id”, “Name”),“ALL” 新{@class =“form-control”,id =“ddlEmp”})..但它不工作.. – KaviSuja

+0

什么不起作用?该代码将生成第一个选项为“'但是选择它会返回'null'值,这意味着'ModelState'将会失效。它只有在你使用'“ - 选择 - ”时才有意义 - “' –

回答

1

您可以通过使用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",否则他们选择了一个特定的选项。

+0

谢谢..它的工作很好... – KaviSuja