代码之家  ›  专栏  ›  技术社区  ›  leora Matt Lacey

用两个列表返回这个JSON结果有什么问题吗

  •  1
  • leora Matt Lacey  · 技术社区  · 14 年前

    我有一个ASP.NET MVC站点,我想在更改下拉列表时调用服务器。我的代码命中服务器控制器操作,但我从未得到回调。这里有我不见的线索吗?

    以下是我的控制器操作:

        public ActionResult LoadTeamsandApplications(int id)
        {
            WorkstreamRoadmapViewModel vm = new WorkstreamRoadmapViewModel();
            vm.Applications = GetAppList(id, 0);
            vm.Teams = GetTeamList(id, 0);
            JsonResult result = Json(vm);
            return result;
        }
    

    注: 盖帕斯特 ()和 获取团队列表 (两)返回

     List<SelectListItem>
    

    这是我的jquery代码:

     $("#filter").change(function(e) {
    
        var filter= $("#filter").val();
        var loadURL = "/List/LoadTeamsandApplications/" + filter;
    
        $.post(loadURL , function(data) {
    
            var items = "<option selected></option>";
            $.each(data.Teams, function(i, item) {
                items += "<option value='" + item.Value + "'>" + item.Text + "</option>";
            });
            $("#teamFilter").html(items);
    
            var items1 = "<option selected></option>";
            $.each(data.Applications, function(i, items1) {
                items1 += "<option value='" + item1.Value + "'>" + item1.Text + "</option>";
            });
            $("#applicationFilter").html(items);
    
        }, "json");
    });
    

    编辑

    我添加了以下代码:

    $(document).ajaxError(function(e, xhr, settings, exception) {
        alert('error in: ' + settings.url + ' \\n' + 'error:\\n' + exception);
    }); 
    

    但我所得到的只是“错误未定义”

    1 回复  |  直到 14 年前
        1
  •  1
  •   Igor Zevaka    14 年前

    解决此问题的几个指针。

    确保您的服务器方法返回您期望的数据。您可以轻松地编写单元测试,以确保返回 JsonResult 用你期望的数据。如果失败,只需调试项目并在上设置断点 return Json(vm); 以确保方法实际返回。

    只是为了调试,尝试通过允许get-change访问URL 返回json(vm); 归来 Json(vm, JsonBehaviour.AllowGet); 看看会发生什么。

    如果以上都是好的,开始坚持 console.log 语句通过JavaScript来确保没有输入错误等。例如:

        var items = "<option selected></option>";
        console.log(data.Teams);
        $.each(data.Teams, function(i, item) {
            items += "<option value='" + item.Value + "'>" + item.Text + "</option>";
        });
        $("#teamFilter").html(items);
    
        var items1 = "<option selected></option>";
        console.log(data.Applications);
        $.each(data.Applications, function(i, items1) {
            items1 += "<option value='" + item1.Value + "'>" + item1.Text + "</option>";
        });
        $("#applicationFilter").html(items);
    

    要使控制台工作,您要么需要火狐的Firebug扩展,要么只需在Chrome中打开开发人员控制台。