Heim >Backend-Entwicklung >C++ >Warum gibt mein ASP.NET MVC $.post-Aufruf an jqGrid einen undefinierten Wert im Dropdown-Menü zurück?
Das Problem: Ein unerwarteter „undefinierter“ Wert erscheint in einem jqGrid-Dropdown-Menü, wenn es mithilfe eines ASP.NET MVC 2 $.ajax()-Aufrufs dynamisch aufgefüllt wird. Dies ist auf falsch formatierte Daten zurückzuführen, die an das Raster zurückgegeben werden. Das jqGrid erwartet ein bestimmtes Format für Dropdown-Werte, wie zum Beispiel: "FE:FedEx; IN:InTime; TN:TNT"
. Die Verwendung von StringBuilder zur Datenformatierung führte zu zusätzlichen Anführungszeichen und einem abschließenden Semikolon.
Analyse: Der ursprüngliche Ansatz verwendet ContentResult(sb.ToString())
, um Daten zurückzugeben. Obwohl es funktionsfähig ist, ist es weniger effizient und anfällig für Formatierungsfehler.
Die Lösung: Die Nutzung der Eigenschaften dataUrl
und buildSelect
von jqGrid innerhalb von editoptions
oder searchoptions
bietet eine sauberere, robustere Lösung. Dadurch entfällt die manuelle Zeichenfolgenformatierung. Das dataUrl
gibt die Datenquelle an und buildSelect
übernimmt die Formatierung.
Beispiel für die Verwendung von dataUrl
und buildSelect
:
<code class="language-javascript">{ name: 'destinations', editable: true, edittype: 'select', editoptions: { dataUrl: '<%= Url.Action("GetDestinationList", "Home") %>', buildSelect: function(response) { var s = ''; if (response && response.length) { for (var i = 0; i < response.length; i++) { s += response[i] + ';'; //Note the semicolon placement } } return s; // Removed trailing "" } } }</code>
Überlegungen zur HTTP-Methode:
Wenn eine POST-Anfrage gegenüber GET für dataUrl
bevorzugt wird, ersetzen Sie Json(allDestinations, JsonRequestBehavior.AllowGet)
durch Json(allDestinations)
auf der Serverseite und fügen Sie ajaxSelectOptions: { type: "POST" }
zu den jqGrid-Optionen hinzu.
Optimierte buildSelect
Funktion:
Die bereitgestellte buildSelect
Funktion kann im Hinblick auf Klarheit und Effizienz leicht optimiert werden (obwohl sie funktional dem Original ähnelt):
<code class="language-javascript">buildSelect: function(response) { return (response && response.length) ? response.join(';') : ''; }</code>
Dieser überarbeitete Ansatz bietet eine besser wartbare und weniger fehleranfällige Methode zum Füllen von jqGrid-Dropdowns.
Das obige ist der detaillierte Inhalt vonWarum gibt mein ASP.NET MVC $.post-Aufruf an jqGrid einen undefinierten Wert im Dropdown-Menü zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!