Ich versuche, ein Dropdown für das jqGrid dynamisch aufzufüllen, wenn der Benutzer Daten bearbeitet. Ich habe es ziemlich funktioniert, aber es gibt einen Wert in der Dropdown-Liste "undefined". Ich vermute, dass dies an der Art liegt, wie ich die Daten an das Grid sende. Ich benutze ASP.NET MVC 2 und ich bekomme die Daten für das Dropdown mit jQuery wie folgt:
%Vor%Nun möchte das jqGrid die Werte für das Dropdown wie folgt formatiert:
%Vor%Ich verwende den StringBuilder, um meine Sammlung zu durchlaufen und die richtige Zeichenfolge bereitzustellen, die jqGrid haben möchte:
%Vor%Ich gebe das von meinem Controller zurück:
%Vor%Das ist alles, und ich bekomme alle Items, die ich für das Drop-Down benötige, aber es gibt noch einen zusätzlichen Punkt (den letzten), der "undefined" heißt.
Ich denke, das Problem ist, wenn ich in FireBug debuggen, das Ergebnis für das jqGrid sieht so aus:
%Vor%Sehen Sie, wie es zwei Sätze von Anführungszeichen gibt. Das liegt wahrscheinlich daran, wenn ich sage:
%Vor%Es erzeugt wahrscheinlich die Anführungszeichen und dann fügt jqGrid eine zweite Menge hinzu. Aber ich bin nicht 100% ig darauf.
Was ist der beste Weg, damit umzugehen? Jeder Rat würde sehr geschätzt werden.
LÖSUNG:
Ich habe das gelöst, indem ich gebraucht habe Rückgabe ContentResult (sb.ToString ();
Ich würde gerne die dataUrl-Methode verwenden, wie Oleg schon erwähnt hat, aber das funktioniert noch nicht.
Wenn Sie versuchen, das Problem nur für jqGrid zu lösen, können Sie einen anderen Weg wählen.
Sie können dataUrl und buildAuswählen Eigenschaften von editoptions oder Suchoptionen anstelle von value
property. Diese Funktionen werden speziell für den Einsatz in AJAX eingeführt. Die dataUrl definiert URL-Ergebnisse im Formular wie
Wenn es für Sie einfacher ist, JSON-Ergebnisse vom Server zurückzugeben, ist Ihre benutzerdefinierte Funktion buildSelect wird helfen. Als Parameter empfängt er die vom Server gesendeten Daten und sollte die Zeichenfolge <select><option>...</option></select>
zurückgeben. Auf diese Weise werden Sie bessere Ergebnisse erzielen.
Wenn Sie sich entscheiden, auf Ihre alte Art und Weise zu bleiben, sollten Sie Ihren Code zumindest auf folgende Weise beheben:
%Vor% hat "FedEx:FedEx;InTime:InTime;TNT:TNT"
anstelle von "ID:FedEx; ID:InTime; ID:TNT; "
.
AKTUALISIERT : Sie haben nach einem kleinen Beispiel gefragt. Lassen Sie uns zum Beispiel alle verschiedenen Werte der Zielzeichenfolgen als List<string>
erhalten und der Name dieser Methode ist GetAllDestinations
. Dann kann Ihre Aktion, die von dataUrl verwendet wird, wie
Um diese Aktion innerhalb von Editoptions oder searchoptionen von jqGrid können Sie über folgende
definieren %Vor% Wenn Sie keine Aktionen haben möchten, die per HTTP GET verwendet werden, können Sie Json(allDestinations);
anstelle von Json(allDestinations, JsonRequestBehavior.AllowGet);
in der Aktion GetDestinationList
verwenden, aber der Liste der jqGrid Optionen eine zusätzliche Option hinzufügen
AKTUALISIERT 2 : Die Antwort ist bereits alt. In der Zwischenzeit wurde der Code von jqGrid, in dem buildSelect
aufgerufen wird, geändert. Jetzt wird der buildSelect
innerhalb des success
Handlers von jQuery.ajax
verwendet (siehe hier ) anstelle des complete
-Handlers vor (siehe der Beitrag und der Beitrag zum Beispiel sein). Also in der aktuellen Version von jqGrid die Zeile
wird nicht benötigt. Die data
sind normalerweise die analysierten JSON-Daten und somit die Zeilen
im obigen Code kann durch
ersetzt werden %Vor%Das Zitat-Problem ist auf diese Weise behoben, glaube ich
%Vor%Dies sollte funktionieren, Daten wurden in diesem Fall von json konvertiert, so dass value zu einem String ohne doppelte Anführungszeichen ausgewertet wird.
Wenn das nicht funktioniert, dann ändere die return-Anweisung wie folgt:
%Vor% Yay Linq (das wird nicht das nachgestellte ;
haben, was ich für dein Problem halte.)
(könnte Tippfehler haben, die ich nicht getestet habe)
Tags und Links asp.net-mvc c# jquery jqgrid