asp.net jqGrid下拉多选

时间:2012-04-03 10:27:00

标签: c#-4.0 jqgrid asmx multi-select

我正在尝试在表单编辑jqGrid(添加表单)中使用jQuery multiselect插件。

这是我用来构建下拉列表的代码(colModel提取):

{ 
    name: 'CaratteristicheCamera',
    index: 'CaratteristicheCamera', 
    width: 50, 
    hidden: true, 
    edittype: 'select',
    editable: true, 
    editrules: { edithidden: true, required: true }, 
    editoptions: {
        multiselect: true,
        dataUrl: '<%# ResolveUrl("~/Service/Domain/ServiceRoom.asmx/GetRoomFeatureList") %>',
        buildSelect: function (data) {
            var retValue = $.parseJSON(data);
            var response = $.parseJSON(retValue.d);

            var s = '<select id="CaratteristicheCamera" name="CaratteristicheCamera">';

            if (response && response.length) {
                for (var i = 0, l = response.length; i < l; i++) {
                    s += '<option value="' + response[i]["Id"] + '">' +
                        response[i]["Descrizione"] + '</option>';
                }
            }

            return s + "</select>";
        },
        dataInit: function() {
            $("#CaratteristicheCamera").multiselect();
        }
    }

},

正如大家们所见,jqGrid调用webmethod放在asmx文件中。一切似乎都运行正常,但我无法收到用户从下拉列表中选择的所有值。似乎系统向服务器发送最后一个选择。 你有任何提示吗?

编辑:这是asmx webservice声明

[WebMethod]
public string SaveRoom(string id, string codice, string Numero, string NumeroPiano,
                       string Nome, string TipoCamera, string StatoCamera,
                       string CaratteristicheCamera, string TipoSdoppiabilita)
{}

1 个答案:

答案 0 :(得分:1)

我和jqGrid 3.4.1一起尝试了Eric Hynds jQuery UI MultiSelect Widget,看不出你所描述的任何问题。我建议你将你的演示与我的比较来找出差异。

我在您的代码中看到的一件坏事是,您在id="CaratteristicheCamera"中生成的<select>上设置了buildSelect属性。您应该只使用<select>而不使用任何其他属性。 jqGrid会自行设置所有属性,例如idmultiple="multiple"

the demo中,我使用了服务器上不存在的editurl: 'test.asmx/dummy'。所以人们会看到像

这样的错误消息

enter image description here

选择并提交所选项目后

enter image description here

然而,人们可以看到关于FiddlerFirebug或IE或Chrome的开发人员工具(请参阅“网络”标签中的HTTP流量)等工具,该演示会发布数据,如

{"name":"test8","closed":"No","ship_via":"FE,TN","oper":"edit","id":"8"}

http://www.ok-soft-gmbh.com/jqGrid/test.asmx/dummy。因此,所选项"FE,TN"的值FedEx, TNT将按预期发送。在您的情况下,CaratteristicheCamera SaveRoom参数应初始化为逗号分隔的所选值列表。如果你把我的演示与年轻人进行比较,我希望你能在你的代码中找到问题。

您发布的代码中的另一个小问题是您在WebMethod GetRoomFeatureList中手动序列化为JSON并返回string。因此字符串将序列化为JSON 两次。所以你使用

var retValue = $.parseJSON(data);
var response = $.parseJSON(retValue.d);

正确的是返回List<Room>之类的内容。 ASP.NET将自动序列化它。如果你要使用jqGrid选项

ajaxSelectOptions: {
    contentType: 'application/json; charset=utf-8',
    dataType: "json"
}

根本不需要data中的buildSelect进行解析。您可以在循环中直接使用data.d[i].Iddata.d[i].Descrizione。我在another answer对你的旧问题提出了同样的问题。