MVC 下拉列表的动态默认选定值
本文关键字:默认 动态 下拉列表 MVC | 更新日期: 2023-09-27 18:35:08
我觉得这个问题的答案必须在几个地方出现,因为这个问题的变体似乎被问了很多。不幸的是,我无法确切地掌握如何实现我想要实现的目标,因此再次非常感谢您的帮助。
我有一个用户组列表,每个用户组都分配给一名工作人员。这是通过循环访问用户组列表并在每个用户组旁边显示可用工作人员的下拉列表来完成的。应该也可以不分配工作人员,因此应该可以使用空值选择选项。
创建新组时,将 null 值作为默认值很好,但是在我只是更新现有记录的情况下,我希望下拉列表默认为具有匹配员工 ID 的选项。
所以我询问可用的工作人员:
var rtrnStaff = (from st in db.PrmTbl_Staffs
join sal in db.PrmTbl_Salutations on st.SalutationID equals sal.ID
where st.Active == true
select new { st.ID, Name = sal.Desc + ". " + st.Name });
要在此数组中插入一个空白值:
List<SelectListItem> staff = new SelectList(rtrnStaff, "ID", "Name").ToList();
staff.Insert(0, (new SelectListItem { Text = "None", Value = "0" })); //can value be = null?
在我看来,对于创建新用户组的表单,我可以提供一个下拉列表,如下所示:
@Html.DropDownList( "staffID", (IEnumerable<SelectListItem>)ViewData["StaffwNull"])
这提供了一个下拉列表,首先是"无"选项,这很好。但是,当我为我的更新表单尝试同样的事情时,添加默认值参数,它不起作用:
@Html.DropDownList( "staffID", (IEnumerable<SelectListItem>)ViewData["StaffwNull"], item.StaffID)
目的是当放置在 foreach 循环中时,与相关 staffID 匹配的选项将显示为默认值。相反,"无"仍然是第一个选项。
我确实尝试只在我的控制器中查询表,而不是在那里构建一个选择列表,而是直接通过 ViewData 将结果传递给视图,然后在视图中执行以下操作:
@Html.DropDownList("staffID", new SelectList(
(System.Collections.IEnumerable) ViewData["Staff"], "ID", "Name", item.StaffID),
new { Name = "staffID" })
这没有可能,但没有"无"选项。显然,我需要一些中间立场!在DropDownList,DropDownListFor,List,SelectList等之间,我很困惑。
编辑
(显示代码的当前状态)
控制器:
var rtrnStaff = (from st in db.PrmTbl_Staffs
join sal in db.PrmTbl_Salutations on st.SalutationID equals sal.ID
where st.Active == true
select new { st.ID, Name = sal.Desc + ". " + st.Name });
List<SelectListItem> staff = new SelectList(rtrnStaff, "ID", "Name").ToList();
ViewData["StaffwNull"] = staff;
视图:
//show dropdown of all staff,
//defaulting to "None" value (works)
@Html.DropDownList("staffID", (IEnumerable<SelectListItem>)ViewData["StaffwNull"], "None")
//show dropdown of all staff,
//defaulting to value matching item.staffID (doesn't work)
//default selection is first list item
//and list doesnt include "None" option
@foreach (var item in Model)
{
...
var thisStaffID = item.StaffID;
....
@Html.DropDownList( "staffID", (IEnumerable<SelectListItem>)ViewData["StaffwNull"], thisStaffID)
}
载,您可以在其中指定选定的值。MVC 在 ViewBag
对象中搜索名为 staffID
的项,并将其用作选定值。您可以使用 DropDownList
方法的重载,它允许您指定选项标签:
@Html.DropDownList("staffID", (IEnumerable<SelectListItem>)ViewData["StaffwNull"], "None")
这会在顶部的选择列表中呈现一个额外的选项,因此您不必手动执行此操作。
旁注:您应该研究 MVC 模型绑定。
你可以为下拉列表(此重载)提供一个 ID,然后使用 jQuery 更新它。
视图
@Html.DropDownList("staffID", (IEnumerable<SelectListItem>)ViewData["StaffwNull"], new { id = "dropdown1" })
jQuery
<script>
$(document).ready(function () {
$('#dropdown1').val('theValueYouWantSelected');
});
</script>