我在视图上有两个选择列表。我需要根据第一个选择列表的所选项目的值填充第二个选择列表的项目,而不发布整个页面。实现这一目标的最佳方法是什么?
以下是视图中的选择列表:
<tr>
<td>
<div class="editor-label">
@Html.LabelFor(model => model.PersonnelAreaID)
</div>
</td>
<td>
<div class="editor-field">
@Html.DropDownListFor(model => model.PersonnelAreaID, TLMS_DropDownLists.PersonnelAreas)
</div>
</td>
</tr>
<tr>
<td>
<div class="editor-label">
@Html.LabelFor(model => model.SupervisorID)
</div>
</td>
<td>
<div class="editor-field">
@Html.DropDownListFor(model => model.PersonnelAreaID, TLMS_DropDownLists.ApprovingAuthorities)
</div>
</td>
</tr>
以下是我目前填充它们的方法:
public static List<SelectListItem> PersonnelAreas
{
get
{
List<SelectListItem> personnelAreas = new List<SelectListItem>();
personnelAreas.Add(new SelectListItem { Value = "", Text = "" });
foreach (PersonnelArea pa in PersonnelArea.GetAllPersonnelAreas())
{
personnelAreas.Add(new SelectListItem { Value = pa.AreaID.ToString(), Text = pa.AreaTitle });
}
return personnelAreas;
}
private set { }
}
public static List<SelectListItem> ApprovingAuthorities
{
get
{
List<SelectListItem> returned = new List<SelectListItem>();
returned.Add(new SelectListItem { Text = "", Value = "" });
foreach (Employee item in Employee.GetAllEmployees().Where(e => e.UserRoleID == 2 || e.UserRoleID == 5))
{
returned.Add(new SelectListItem { Text = string.Format("{0} {1}", item.FirstName, item.LastName), Value = item.ID.ToString() });
}
return returned;
}
private set { }
}
我需要ApprovingAuthorities选择列表,仅显示适用于PersonnelArea的那些。
答案 0 :(得分:2)
“最佳”方式可能是一个意见问题,但一个好方法是使用AJAX来填充第二个下拉列表。
尽管可以使用静态数据填充第一个下拉列表,但可以通过生成填充第二个的客户端JavaScript代码,或者通过对返回JSON的Controller方法执行AJAX调用,然后填充来填充第二个下拉列表。用这些数据上传第二个下拉列表。
这是一篇很好的文章:“在http://www.sidecreative.com/Blog/Entry/Cascading-dropdown-lists-with-MVC4-and-jQuery处使用MVC 4和jQuery级联下拉列表”。
祝你好运!答案 1 :(得分:0)
您还可以使用SignalR填充第二个组合框。您可以按照好的教程here