【问题标题】:Select List not populating in jqgrid 4.4.4 with dataurl选择列表未在 jqgrid 4.4.4 中填充 dataurl
【发布时间】:2013-02-14 13:02:14
【问题描述】:

我刚刚从 jqgrid 3.6.5 迁移到网格的 4.4.4 版本。问题是我的选择列表没有填充 dataUrl 选项和 edittype 选择。请看下图
从图中可以看到,grid 已经向 GetManager 和 GetTerritory 发送了两个 ajax 请求,但是结果数据没有显示在选择列表中。我添加了语言文件 jqgrid.min.js 和 grid.formedit.js。下面是其中一种列模型的代码

{ name: 'ManagerId',
                            //sortable: true,
                            index: 'ManagerId',
                            //width: 50,
                            hidden:true,
                            align: 'center',
                            formatter: 'mail',
                            editable: true,
                            edittype: 'select',
                            editoptions: {aysnc:false, dataUrl: '@Url.Action("GetManagers", "Employee")',
                                buildSelect: function (data) {
                                    var response = jQuery.parseJSON(data.responseText);

                                    var s = '<select>';
                                    s += '<option value="0">--No Manager--</option>';
                                    $($.parseJSON(data.responseText)).map(function () {


                                        s += '<option value="' + this.EmployeeId + '">' + this.EmployeeName + '</option>';
                                    });

                                    return s + "</select>";
                                }
                            },
                            editrules: { required: true,edithidden:true },
                            formoptions: { elmsuffix: ' *',label:'Manager' }
                        },

任何人都可以建议它有什么问题。

编辑 1
服务器响应

[{"EmployeeId":2,"EmployeeName":"Jack"},{"EmployeeId":4,"EmployeeName":"xe"},{"EmployeeId":1001,"EmployeeName":"John"},{"EmployeeId":2000,"EmployeeName":"Jack"},{"EmployeeId":2001,"EmployeeName":"Jill"}]

响应标头

Cache-Control   private
Connection  Close
Content-Length  203
Content-Type    application/json; charset=utf-8
Date    Thu, 14 Feb 2013 13:20:09 GMT
Server  ASP.NET Development Server/10.0.0.0
X-AspNet-Version    4.0.30319
X-AspNetMvc-Version 3.0

谢谢

【问题讨论】:

  • 顺便说一句,我已经确认 ajax 请求正在为两个选择列表返回数据
  • 您能否在服务器响应中包含详细信息,以便查看响应的标题和正文?了解您在 jqGrid 中使用了哪些 Ajax 设置(如 ajaxSelectOptions)非​​常重要。
  • 奇怪的是也没有js错误
  • 我在构建选择中放置了一个警报并显示了它,但从未调用过带有地图功能的第二个警报

标签: jqgrid jqgrid-asp.net


【解决方案1】:

首先我建议您检查buildSelect 回调中data 参数的类型。取决于其他一些因素,data 可能已经是从 JSON 响应中解析的对象。您可以在buildSelect 的开头包含alert(typeof data.responseText);。或者,您可以使用jQuery.isArray 来验证data 参数是否已经是数据数组,或者需要使用jQuery.parseJSON 将输入数据转换为数组。

下一个问题是您使用jQuery.map 而不是jQuery.each。所以代码可能是以下内容

buildSelect: function (response) {
    var data = typeof response === "string" ?
                   $.parseJSON(response.responseText) : response,
        s = "<select>";

    s += '<option value="0">--No Manager--</option>';
    $.each(data, function () {
        s += '<option value="' + this.EmployeeId + '">' + this.EmployeeName +
           '</option>';
    }
    return s + "</select>";
}

您应该另外修复editoptions 的属性aysnc:false。这些选项是未知的,将被忽略。

【讨论】:

  • 谢谢 Oleg,你说得对,数据实际上是在 data 而不是 data.responseText。 jqGrid有批量编辑插件吗?
  • @MuhammadAdeelZahid:不客气!我不知道您在“批量编辑插件”下的意思。如果您想在本地编辑多行并一次保存所有更改,那么我不建议您这样做。
  • 通过批量编辑,我的意思是用户添加 4 行,删除 2 和编辑 3。所有这些都发生在客户端(在 json 中),当用户单击保存按钮时,数据被持久化到数据库只有一次。
  • @MuhammadAdeelZahid:我不建议实施这种行为,因为可能存在并发错误(不同用户从不同计算机修改相同数据)。您是否在当前应用程序中实现了一些并发控制?我个人在所有网络应用程序中都使用optimistic concurrency control
  • @MuhammadAdeelZahid:例如见the answer
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多