Heim >Backend-Entwicklung >C++ >Warum zeigt mein ASP.NET MVC jqGrid-Dropdown einen „undefinierten' Wert an?
Auflösen des „undefinierten“ Werts in ASP.NET MVC jqGrid Dropdowns
Beim dynamischen Füllen von jqGrid-Dropdown-Menüs während der Datenbearbeitung erscheint häufig ein unerwünschter „undefinierter“ Wert. Dies ist auf Inkonsistenzen zwischen der von jqGrid erwarteten Datenstruktur und der Datenbereitstellungsmethode zurückzuführen.
Korrektes jqGrid-Datenformat:
Das ideale Format für den Dropdown-Wert ist: value: "FE:FedEx; IN:InTime; TN:TNT"
Problem mit der aktuellen Methode:
Der aktuelle Ansatz verwendet ASP.NET MVC mit jQuerys $.ajax()
, um Dropdown-Daten abzurufen. Ein StringBuilder
manipuliert die abgerufenen Daten so, dass sie dem Format von jqGrid entsprechen, aber ein zusätzlicher „undefinierter“ Eintrag bleibt bestehen.
Debugging-Ergebnisse:
FireBug-Debugging weist darauf hin, dass zusätzliche Anführungszeichen, die durch sb.ToString()
eingeführt wurden, der Übeltäter sind. jqGrid fügt seine eigenen Anführungszeichen hinzu, was zu doppelten Anführungszeichen und dem „undefinierten“ Problem führt.
Eine überlegene Lösung: Verwendung von dataUrl
und buildSelect
Anstatt die Eigenschaft value
direkt zu manipulieren, besteht eine robustere Lösung darin, die Eigenschaften dataUrl
und buildSelect
von jqGrid innerhalb von editoptions
oder searchoptions
zu verwenden. Diese ermöglichen das benutzerdefinierte Abrufen und Formatieren von Daten.
Beispiel dataUrl
Aktion:
<code class="language-csharp">public JsonResult GetDestinationList() { List<string> allDestinations = GetAllDestinations(); return Json(allDestinations, JsonRequestBehavior.AllowGet); }</code>
Beispiel buildSelect
Funktion:
<code class="language-javascript">buildSelect: function(data) { var s = ''; if (data && data.length) { for (var i = 0, l = data.length; i < l; i++) { s += data[i] + ';'; // Assuming data[i] is already in "key:value" format } return s.substring(0, s.length - 1); // Remove trailing semicolon } return s; }</code>
Aktualisiert editoptions
:
<code class="language-javascript">{ name: 'destinations', editable: true, edittype: 'select', editoptions: { dataUrl: '/YourController/GetDestinationList', // Replace with your controller action path buildSelect: function(data) { // ... (buildSelect function from above) ... } } }</code>
Wichtige Hinweise:
Json(allDestinations);
ohne JsonRequestBehavior.AllowGet
verwenden, müssen aber ajaxSelectOptions: { type: "POST" }
zu Ihren jqGrid-Optionen hinzufügen.buildSelect
innerhalb des $.ajax()
-Erfolgshandlers aufgerufen, wodurch jQuery.parseJSON(data.responseText)
unnötig wird.Dieser überarbeitete Ansatz bietet eine sauberere, effizientere und weniger fehleranfällige Methode zur Verwaltung von jqGrid-Dropdowns und beseitigt das Problem der „undefinierten“ Werte. Denken Sie daran, /YourController/GetDestinationList
durch den tatsächlichen Pfad zu Ihrer Controller-Aktion zu ersetzen.
Das obige ist der detaillierte Inhalt vonWarum zeigt mein ASP.NET MVC jqGrid-Dropdown einen „undefinierten' Wert an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!