在MVC4 ASP.NET应用程序上使用Ajax级联下拉列表

时间:2014-02-24 19:30:12

标签: ajax asp.net-mvc-4

我正在构建一个应用程序,用于在数据库中存储有关Job的信息。我正在处理表单以添加信息,所需的三个属性是公司,部门和组织单位。分部属于公司,组织属于组织。单位属于一个司。考虑到这种关系,我希望每个都有三个下拉列表,其中Division列表将取决于所选的公司和组织。单位清单将取决于所选的部门。

我尝试使用部分视图和AJAX实现它,只要在下拉列表中更改选项,就会刷新它。每当公司选择发生变化时,我都可以刷新部门列表,但是组织。无论何时更改分区选择,单位列表都保持不变。

见下文:

以下是处理变更请求的脚本:

$(function () {
    $('#SelectedCompanyID').change(function () {
        // when the selection of the Company changes, get the new value
        var value = $(this).val();

        // and send it as AJAX request to the newly created action
        $.ajax({
            url: '@Url.Action("DivisionDDL")',
            type: 'POST',
            data: { companyID: value },
            success: function (result) {
                // when the AJAX succeeds refresh the ddl container with
                // the partial HTML returned by the DivisionDDL controller action
                $('#divisionDDLContainer').html(result);
            }
        });
    });

    $('#SelectedDivisionID').change(function () {
        // when the selection of the Division changes, get the new value
        var value = $(this).val();

        // and send it as AJAX request to the newly created action
        $.ajax({
            url: '@Url.Action("OrgUnitDDL")',
            type: 'POST',
            data: { divisionID: value },
            success: function (result) {
                // when the AJAX succeeds refresh the ddl container with
                // the partial HTML returned by the OrgUnitDDL controller action
                $('#orgUnitDDLContainer').html(result);
            }
        });
    });
});

以下是使用的表单部分:

@Html.DropDownListFor(m => m.SelectedCompanyID, Model.ListCompany)

<div id="divisionDDLContainer">
@Html.Partial("DivisionDDL", Model)
</div>

<div id="orgUnitDDLContainer">
@Html.Partial("OrgUnitDDL", Model)
</div>

以下是部分观点:

OrgUnitDDL:

@model MyApp.Models.ViewModelJobDetails
@Html.DropDownListFor(m => m.SelectedOrgUnitID, Model.ListOrgUnit)

DivisionDDL:

@model MyApp.Models.ViewModelJobDetails
@Html.DropDownListFor(m => m.SelectedDivisionID, Model.ListDivision)

以下是控制器中的方法:

    public ActionResult DivisionDDL(string companyID)
    {
        ViewModelJobDetails vm = new ViewModelJobDetails();
        vm.lDivision = Maintenance.GetDivisionList(companyID);

        return PartialView(vm);
    }

    public ActionResult OrgUnitDDL(string divisionID)
    {
        ViewModelJobDetails vm = new ViewModelJobDetails();
        vm.lOrgUnit = Maintenance.GetOrgUnitList(divisionID);

        return PartialView(vm);
    }

我试过看看组织的功能。单位列表可以自行运行(通过取出AJAX请求的第一部分并填写分部下拉列表,其中包含所有值,无论公司选择哪个),它都有效。但是当我将两个请求放在一起时,只有Division功能可以工作。

有没有人对可能出现的问题有任何想法?

更新经过更多测试后,我意识到,如果我未选中公司下拉列表并从下拉列表中选择一个部门,则组织。单位列表将按预期填充。但是一旦我改变公司,组织的功能。单位列表将消失,但是分区列表将按预期填充。

0 个答案:

没有答案