我正在尝试在表单编辑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)
{}
答案 0 :(得分:1)
我和jqGrid 3.4.1一起尝试了Eric Hynds jQuery UI MultiSelect Widget,看不出你所描述的任何问题。我建议你将你的演示与我的比较来找出差异。
我在您的代码中看到的一件坏事是,您在id="CaratteristicheCamera"
中生成的<select>
上设置了buildSelect
属性。您应该只使用<select>
而不使用任何其他属性。 jqGrid会自行设置所有属性,例如id
或multiple="multiple"
。
在the demo中,我使用了服务器上不存在的editurl: 'test.asmx/dummy'
。所以人们会看到像
选择并提交所选项目后
然而,人们可以看到关于Fiddler,Firebug或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].Id
和data.d[i].Descrizione
。我在another answer对你的旧问题提出了同样的问题。