Jquery 编辑后如何刷新下拉列表?

Jquery 编辑后如何刷新下拉列表?,jquery,jqgrid,Jquery,Jqgrid,在我的应用程序中,我使用JQGrid加载一些联系人数据,当我编辑/添加条目时,我从数据库中选择联系人的姓名,然后更新/添加联系人 我的问题是,当我单击submit按钮时,我想刷新下拉列表和已经从下拉列表输入到dispaear的数据 我的代码: 对于colModel: { name: 'OwnerEmail', index: 'OwnerEmail', width: 200, align: "center", sortable: true, sorttype: 'text', editable:

在我的应用程序中,我使用JQGrid加载一些联系人数据,当我编辑/添加条目时,我从数据库中选择联系人的姓名,然后更新/添加联系人

我的问题是,当我单击submit按钮时,我想刷新下拉列表和已经从下拉列表输入到dispaear的数据

我的代码:

对于colModel:

{ name: 'OwnerEmail', index: 'OwnerEmail', width: 200, align: "center", sortable: true, sorttype: 'text', editable: true, edittype: 'select', editrules: { required: true }, editoptions: { value: ownersList} },
我在选择行上填充下拉列表,当我选择一行时,下拉列表将刷新

onSelectRow: function (id) {
                var advOwners = $.ajax({
                    type: 'POST',
                    data: {},
                    url: 'MyWebService.asmx/GetOwners',
                    async: false,
                    error: function () {
                        alert('An error has occured retrieving Owners!');
                    }
                }).responseXML;

                var aux = advOwners.getElementsByTagName("string");
                ownersList = "";
                for (var i = 0; i < aux.length; i++) {
                    ownersList += aux[i].childNodes[0].nodeValue + ':' + aux[i].childNodes[0].nodeValue + '; ';
                }
                ownersList = ownersList.substring(0, ownersList.length - 2);

                jQuery("#GridView").setColProp('OwnerEmail', { editoptions: { value: ownersList} });
             }
但是当我再次进入编辑/添加表单时,下拉列表没有刷新,它包含了首先加载的项目

有什么帮助吗

谢谢,
Jeff

我认为最好使用的dataUrl属性而不是usage value属性。在这种情况下,您不需要在onsetrow内部使用同步Ajax调用来手动获取select数据。如果需要数据,相应的调用将为您执行jqGrid

dataUrl中的URL应返回包含所有元素的HTML片段。因此,您可以将dataUrl中的任何其他响应转换为实现相应buildSelect回调函数所需的格式

在您的位置上,我更愿意从“MyWebService.asmx/getowner”URL返回JSON数据,而不是您当前所做的XML数据。在最简单的情况下,它可以是类似web的方法

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public List<string> GetSelectData() {
    return new List<string> {
        "User1", "User2", "User3", "User4"
    };
}
默认情况下,jqGrid在相应的Ajax调用中使用dataType:html,请参见。要将行为更改为dataType:json、contentType:application/json,还应使用jqGrid的ajaxSelectOptions参数作为

ajaxSelectOptions: { contentType: "application/json", dataType: 'json' },
或作为

如果您将使用HTTP POST,这是ASMX web服务的默认设置

colModel中列的相应设置为

在哪里

注意上面的代码使用data.d,这是ASMX web服务所必需的。如果要迁移到ASP.NET MVC或WCF,则需要删除d属性的用法并直接使用数据


更新:您可以下载VS2010演示项目,该项目实现了我上面写的内容。

我按照您的意见修改了代码,但它从未进入GetSelectData web方法。@Jeff Norman:如果您愿意,我可以上传一个演示项目,用于验证我的建议。@JeffNorman:您可以找到演示VS2010项目,该项目以我描述的形式实现dataUrl。演示本身不实现编辑,因此编辑结束后无法保存数据。
ajaxSelectOptions: { contentType: "application/json", dataType: 'json' },
ajaxSelectOptions: {
    contentType: "application/json",
    dataType: 'json',
    type: "POST"
},
edittype: 'select', editable: true,
editoptions: {
    dataUrl: '/MyWebService.asmx/GetSelectData',
    buildSelect: buildSelectFromJson
}
var buildSelectFromJson = function (data) {
        var html = '<select>', d = data.d, length = d.length, i = 0, item;
        for (; i < length; i++) {
            item = d[i];
            html += '<option value=' + item + '>' + item + '</option>';
        }
        html += '</select>';
        return html;
    };