在asp.net mvc中选择其他一个下载一个下拉列表

时间:2011-01-21 08:51:23

标签: asp.net-mvc-2 drop-down-menu

如何在第二个选择第一个和第三个时加载第二个下拉列表。在asp.net mvc 2

1 个答案:

答案 0 :(得分:0)

我的下拉触发器是一个ajax帖子,它将所选的ID发送给控制器,然后返回一个部分视图,覆盖占位符div的html。

查看;这设置了ActionUrl,你还需要一个占位符div(在我的例子中称为departments)来下拉注入:

    <script type="text/javascript">
        var ActionUrl = '<%= Url.Action("RenderDepartments", "ControllerName") %>';
    </script>
    <script src="<%: ResolveUrl("~/Scripts/Custom/DepartmentFilter.js")%>" type="text/javascript"></script>
    <%: Html.DropDownListFor(model => model.OfficeId, Model.ListItems, "-- Please Select --", new { onchange = "GetDepartments()" })%>
    // ^^ ON CHANGE IS IMPORTANT  ^^
    <div id="departments"></div>

JQuery的;

     function GetDepartments() {
            $.ajax(
            {
                type: "POST",
                url: ActionUrl,
                data: { officeId: $("#OfficeId").val() },
                success: function (data) {
                        $("#departments").html(data);
                }, error: function (XMLHttpRequest, textStatus, errorThrown) {
                    alert('XMLHttpRequest:' + XMLHttpRequest.responseText);
                    alert('textStatus:' + textStatus);
                    //alert('errorThrown:' + errorThrown);
                }

            });
     }

控制器行动;

        public ActionResult RenderDepartments(int? officeId)
    {
        if (officeId.HasValue)
        {
            var departments = new SelectList(ents.GetDepartments(officeId), "departmentID", "Name");
            var model = new DropdownListViewModel(departments);

            return PartialView("DepartmentDropdown", model);
        }
        return null;
    }

这是可以为空的,因为用户可以提交“ - 请选择 - ”,在这种情况下将返回null并删除部门下拉列表。