2012-04-03 151 views
1

我想在表单中使用jQuery multiselect插件编辑jqGrid(添加表单)。asp.net jqGrid下拉多选择

这是我使用建下拉代码(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 web服务声明

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

你能否指定更确切的来自你尝试使用的“multiselect”插件。是Eric Hynds [jQuery UI MultiSelect Widget](https://github.com/ehynds/jquery-ui-multiselect-widget)?你能描述一下更为详细的现存问题吗?您写下了“我无法接收用户从下拉列表中选择的所有值”。用户选择列表是否被剪切?你另外写了另外一个问题:“系统发送给服务器最后一个选择”。你的意思是**以前的**选择?因此,如果您第二次打开表单,用户的第一个选择将被发送到服务器? – Oleg 2012-04-03 10:54:44

+0

是的,我使用Eric Hynds图书馆(v 1.12)。会发生什么是我点击加号图标来添加新的实体;它会出现在窗体中,我可以填充它的所有字段,并且可以在CaratteristicheCamera下拉列表中选择多个项目。然后,我点击保存按钮,系统调用asmx webmethod,但在参数中我看到,通过调试,只是最后选择的项目。 (我编辑我的问题) – frabiacca 2012-04-03 11:05:14

回答

1

我试图Eric HyndsjQuery UI MultiSelect Widget与jqGrid的3.4.1在一起,看不出你所描述的任何问题。我建议你比较你的演示与我的发现差异。

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

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

enter image description here

错误信息选择和提交所选项目

enter image description here

后不过一个可以相对于的工具,如Fiddler,IE的Firebug或开发人员工具看Chrome浏览器(请参阅“网络”选项卡中的HTTP流量)演示发布数据,如

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

http://www.ok-soft-gmbh.com/jqGrid/test.asmx/dummy。因此,选定项目FedEx, TNT的值"FE,TN"将按预期发送。在你的情况下,SaveRoomCaratteristicheCamera参数应该初始化为选定值的逗号分隔列表。如果你将我的演示与青春比较,我希望你会在代码中发现问题。

您发布的代码中的另一个小问题是您在WebMethodGetRoomFeatureList中手动序列化为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" 
} 

buildSelectdata将没有必要在所有的解析。您可以直接在循环中使用data.d[i].Iddata.d[i].Descrizione。我在another answer关于你的旧问题提出了同样的问题。

+0

错误是在dataInit处理程序。 thx oleg! (啊,我还没有重构我的代码,因为我非常喜欢我们的路线图) – frabiacca 2012-04-04 23:00:08

+0

@frabiacca:不客气! – Oleg 2012-04-05 05:43:41

+0

@Oleg当我处于编辑模式如何获得值检查? – 2014-01-09 10:35:12