0

我有两个组合框:一个用于客户,一个用于项目。The idea is that when the Client is selected, the Projects combo is then populated. 在我的 MVC 代码中,组合看起来像:

@Html.DropDownListFor(Function(model) model.ClientID, New SelectList(Model.Clients, "ClientID", "Name"), New With {.id = "SelectedClientID"})
@Html.DropDownListFor(Function(model) model.ProjectID, Enumerable.Empty(Of SelectListItem), New With {.id = "SelectedProjectID"})

客户组合的 ID 为SelectedClientID,项目组合的 ID 为SelectedProjectID

我的问题是我的JavaScript,它在选择客户端时会在控制器中触发操作。

<script type="text/javascript">
    $(function () {
        $('#SelectedClientID').change(function () {
            var selectedClientID = $(this).val();
            $.getJSON('@Url.Action("GetProjects")', { ClientID: selectedClientID }, function (projects) {
                var projectsSelect = $('#SelectedProjectId');
                projectsSelect.empty();
                $.each(projects, function (index, project) {
                    projectsSelect.append(
                        $('<option/>')
                            .attr('value', project.ProjectID)
                            .text(project.Name)
                    );
                });
            });
        });
    });
</script>


Function GetProjects(ClientID As Integer) As ActionResult
    Return Json(db.ppProjects.Where(Function(c) c.ClientID = ClientID), JsonRequestBehavior.AllowGet)
End Function

这段代码主要取自这个例子。当我调试时,我从客户端组合中选择一个客户端。这会触发该.change功能。GetProjectsAction 被正确调用并返回其 JSON 。但随后 javascript 就停止了。之后它永远不会进入代码,它会跳过所有的成功函数,function(projects).

什么可能导致这种情况发生?

我也尝试用这样的同步调用替换我的$.getJSON线路:

$.ajax({ datatype: "json", url: "GetProjects", data: { ClientID: selectedClientID}, async: false }).done(function (projects) {

但结果相同,成功代码仍然被跳过。

4

1 回答 1

0

您的代码看起来正确。尝试使用done()而不是成功回调:

$.getJSON('@Url.Action("GetProjects")', { ClientID: selectedClientID })
        .done(function (projects) {
                var projectsSelect = $('#SelectedProjectId');
                projectsSelect.empty();
                $.each(projects, function (index, project) {
                    projectsSelect.append(
                        $('<option/>')
                            .attr('value', project.ProjectID)
                            .text(project.Name)
                    );
                });
            });
于 2013-08-20T22:21:59.020 回答