我已经通过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--”..我怎么能这样做.. 任何人都可以帮我这样做.. 提前谢谢..
答案 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"
,否则他们会选择特定选项。