1

我在一个视图上有两个选择列表。我需要根据第一个选择列表的选定项目的值填充第二个选择列表的项目,而不发布整个页面。实现这一目标的最佳方法是什么?

以下是视图中的选择列表:

                <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 的那些。

4

2 回答 2

2

“最好”的方法可能是一个见仁见智的问题,但一个好的方法是使用 AJAX 填充第二个下拉列表。

第一个下拉列表可以填充静态数据,第二个可以通过生成填充第二个的客户端 JavaScript 代码来填充,或者通过对返回 JSON 的 Controller 方法执行 AJAX 调用,然后填充第二个带有该数据的下拉菜单。

这是一篇关于它的好文章:“使用 MVC 4 和 jQuery 级联下拉列表”,位于http://www.sidecreative.com/Blog/Entry/Cascading-dropdown-lists-with-MVC4-and-jQuery

祝你好运!

于 2013-09-05T14:48:23.313 回答
0

您还可以使用 SignalR 填充第二个组合框。你可以在这里学习一个很好的教程

于 2013-09-05T15:01:09.433 回答