ASP.NET MVC $ .post-Aufruf, der einen String zurückgibt ... benötigt Hilfe mit dem Format für jqGrid

8

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.

    
dolphy 04.11.2010, 20:35
quelle

3 Antworten

13

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

%Vor%

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

aussehen %Vor%

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

%Vor%

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

%Vor%

wird nicht benötigt. Die data sind normalerweise die analysierten JSON-Daten und somit die Zeilen

%Vor%

im obigen Code kann durch

ersetzt werden %Vor%     
Oleg 04.11.2010, 22:53
quelle
2

Dies ist eine andere Alternative

[Controller-Methode]

%Vor%

[_ Teilansicht auswählen]

%Vor%

[Seite mit jqGrid]

%Vor%

Hoffen wir, dass das Stunden googeln spart!

    
Kwex 10.10.2011 20:39
quelle
1

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.)

%Vor%

(könnte Tippfehler haben, die ich nicht getestet habe)

    
Hogan 04.11.2010 20:44
quelle

Tags und Links