2012-04-03 10 views
1

jqGrid(フォームの追加)の編集でjQueryマルチセレクションプラグインを使用しようとしています。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(); 
     } 
    } 

}, 

君たちは、ASMXファイルに配置jqGrid呼び出しWebMethod属性を見ることができるように。すべてが正常に動作するようですが、ドロップダウンからユーザーが選択した値をすべて受け取ることはできません。システムが最後の選択をサーバーに送信したようです。 あなたはそれについてのヒントを持っていますか?

EDIT:これは私がjqGrid 3.4.1と一緒にEric HyndsjQuery UI MultiSelect Widgetを試してみましたが、あなたが記載された任意の問題を見ることができなかった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

「マルチセレクション」プラグインの中からどれを使用しようとした方がより正確に指定できますか?それはEric Hynds [jQuery UI MultiSelect Widget](https://github.com/ehynds/jquery-ui-multiselect-widget)ですか?既存の問題をより詳細に記述できますか?あなたは「私はドロップダウンからユーザーが選択したすべての値を受け取ることができません」と書いています。ユーザーの選択肢のリストは削除されていますか?あなたはさらに、「システムが最後の選択をサーバーに送信する」という別の問題について書きました。 **以前の**選択を意味しますか?したがって、2回目にフォームを開くと、最初のユーザー選択がサーバーに送信されます。 – Oleg

+0

はい、私はEric Hyndsライブラリ(v1.12)を使用しています。何が起こるかは、新しいエンティティを追加するためにプラスアイコンをクリックすることです。それはフォームに表示され、私はそれのすべてのフィールドを埋めることができ、私はCaratteristicheCameraドロップダウンで複数の項目を選択することができます。次に保存ボタンをクリックし、システムはasmx webmethodを呼び出しますが、私が見るパラメータでは、最後に選択した項目だけをデバッグします。 (私の質問を編集しました) – frabiacca

答えて

1

です。私はあなたのデモを私と比較して違いを見つけることをお勧めします。

あなたのコードに表示される1つの悪い点は、buildSelectに生成する<select>id="CaratteristicheCamera"属性を設定したことです。追加の属性なしで<select>を使用するだけです。 jqGridは、すべての属性をidまたはmultiple="multiple"のように設定します。

the demo私はサーバに存在しないediturl: 'test.asmx/dummy'を使用しました。だから、1が選択された項目

enter image description here

を選択し、送信後

enter image description here

のようなエラーメッセージが表示さにもかかわらず1はFiddlerFirebugまたはDeveloper 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。選択された項目FedEx, TNTの値"FE,TN"が期待通りに送信されます。あなたのケースではCaratteristicheCameraのパラメータは、選択した値のコンマ区切りリストに初期化する必要があります。私のデモと若者を比較すると、あなたのコードで問題が見つかることを願っています。

投稿したコードのもう1つの小さな問題は、WebMethodGetRoomFeatureListに手動でJSONをシリアル化し、stringを返すことです。したがって、文字列はJSON に2回にシリアル化されます。だから、あなたは正しい

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ハンドラにありました。オックス! (ああ、私はまだ私のコードをリファクタリングしていません。なぜなら私は非常に遅れて私たちのロードマップを尊重しているからです) – frabiacca

+0

@frabiacca:あなたは大歓迎です! – Oleg

+0

@Oleg編集モードに入っているときどのように値を確認することができますか? –