2012-04-03 10 views
1

Ich versuche, jQuery Multiselect-Plugin in einer Form bearbeiten jqGrid (Formular hinzufügen) verwenden.asp.net jqGrid Dropdown Multiselect

Dies ist der Code (colModel Extrakt) Ich bin mit dem Drop-Down bauen:

{ 
    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(); 
     } 
    } 

}, 

Wie ihr sehen könnt, jqGrid Anruf Webmethod in asmx-Datei abgelegt. Alles scheint in Ordnung zu sein, aber ich kann nicht alle Werte empfangen, die der Benutzer aus dem Dropdown-Menü auswählt. Es scheint, dass das System die letzte Auswahl an den Server sendet. Haben Sie irgendwelche Tipps?

EDIT: Das ist die asmx webservice Erklärung

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

Können Sie genauer angeben, welche von "multiselect" Plugins Sie verwenden möchten. Ist es Eric Hynds [jQuery UI MultiSelect Widget] (https://github.com/ehynds/jquery-ui-multiselect-widget)? Können Sie das bestehende Problem detaillierter beschreiben? Sie haben geschrieben: "Ich kann nicht alle Werte erhalten, die der Benutzer aus dem Dropdown-Menü auswählt". Wird die Liste der Benutzerauswahlen gekürzt? Sie haben zusätzlich über ein anderes Problem geschrieben: "Das System sendet die letzte Auswahl an den Server". Meinst du ** vorherige ** Auswahl? Wenn Sie das Formular zum zweiten Mal öffnen, wird die erste Auswahl des Benutzers an den Server gesendet. – Oleg

+0

Ja, ich benutze Eric Hynds-Bibliothek (v 1.12). Was passiert ist, dass ich auf das Plus-Symbol klicke, um eine neue Entität hinzuzufügen; es erscheint das Formular, ich kann alle Felder darin ausfüllen und ich kann mehrere Einträge im CartertisticheCamera Dropdown-Menü auswählen. Dann klicke ich auf Speichern und das System ruft die asmx webmethod auf, ABER im Parameter sehe ich durch Debug nur das zuletzt ausgewählte Element. (Ich habe meine Frage bearbeitet) – frabiacca

Antwort

1

Ich versuchte Eric HyndsjQuery UI MultiSelect Widget zusammen mit jqGrid 3.4.1 und kein Problem sehen konnten, das Sie beschrieben. Ich empfehle Ihnen, Ihre Demo mit meiner zu vergleichen, um die Unterschiede zu finden.

Eine schlechte Sache, die ich in Ihrem Code sehe, ist, dass Sie id="CaratteristicheCamera" Attribut auf die <select> setzen, die Sie in buildSelect generieren. Sie sollten einfach <select> ohne zusätzliche Attribute verwenden. Das jqGrid wird sich alle Attribute wie id oder multiple="multiple" setzen.

In the demo habe ich editurl: 'test.asmx/dummy' verwendet, die nicht auf dem Server vorhanden sind. So sieht man die Fehlermeldung wie

enter image description here

nach der Auswahl und der Vorlage der ausgewählten Elemente

enter image description here

Trotzdem kann man mit Bezug auf Tools wie Fiddler, Firebug oder Developer Tools von IE sehen oder Chrome (siehe HTTP-Datenverkehr auf der Registerkarte "Netzwerk"), dass die Demo die Daten wie

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

zu http://www.ok-soft-gmbh.com/jqGrid/test.asmx/dummy. Die Werte "FE,TN" der ausgewählten Objekte FedEx, TNT werden also wie erwartet gesendet. In Ihrem Fall sollte der CaratteristicheCamera Parameter von SaveRoom auf die kommagetrennte Liste der ausgewählten Werte initialisiert werden. Ich hoffe, Sie werden das Problem in Ihrem Code finden, wenn Sie meine Demo mit Jugend vergleichen.

Ein weiteres kleines Problem in dem Code, die Sie auf dem Laufenden ist, dass Sie die Serialisierung JSON manuell im WebMethodGetRoomFeatureList und gibt string machen. So wird die Zeichenfolge zu JSON zweimal serialisiert. So verwenden Sie

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

Richtig so etwas wie List<Room> zurückkehren wird. ASP.NET wird es automatisch serialisieren. Wenn Sie die Option jqGrid

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

die data in buildSelect wird verwenden würde gar nicht analysiert benötigt. Sie können data.d[i].Id und data.d[i].Descrizione direkt in der Schleife verwenden.Ich schreibe dir das gleiche Problem in another answer auf Ihre alte Frage.

+0

Fehler im DataInit-Handler. thx oleg! (ah, ich habe meinen Code noch nicht umgestaltet, weil ich extrem spät unsere Roadmap respektiere) – frabiacca

+0

@frabiacca: Gern geschehen! – Oleg

+0

@Oleg Wenn ich im Bearbeitungsmodus bin Wie kann der Wert überprüft werden? –