2012-04-03 148 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