Ich habe eine Ansicht, die 2 @ DropDownListFor's Helfer enthält:
%Vor%Hier ist das temporäre Modell, das ich verwende, um Daten zu erfassen:
%Vor%Einer der DropDownLists wird gefüllt, wenn die Seite erstellt wird, und der zweite wird basierend auf der Option gefüllt, die der Benutzer in der ersten DropDownList auswählt. Um dies zu erreichen, benutze ich Ajax. Das Javascript, das ich benutze, sieht so aus:
Hier ist der Controller, den der AJAX aufruft:
%Vor%Bis zu diesem Punkt funktioniert alles - Wenn ich einen Wert in meinem Province DropDown wähle, wird das JavaScript-Ereignis ausgelöst und die Controller-Aktion gibt die Auswahllistenwerte an das Cities DropDown zurück, das Problem ist jedoch, dass die Daten (des Formats des Daten, die die Aktion zurückgibt, sind falsch. Ich habe dies getestet, indem ich ein Paragraph-Element erstellt und seinen Text mit dem Rückgabewert des Ajax-Aufrufs aktualisiert habe, nämlich: "System.Web.Mvc.SelectListItemSystem.Web.Mvc.SelectListItemSystem.Web.Mvc.Select ListItem"
* Hinweis: Ich bin neu in Ajax und im Prozess des Lernens von Jquery und AJAX.
Der Grund, warum Sie eine Sammlung von Zeichenketten "System.Web.Mvc.SelectListItemSystem"
erhalten, ist, dass var lstCities = new SelectList(new[] { "City1", "City2", "City3" });
IEnumerable<SelectListItem>
zurückgibt und String.Join("", lstCities)
die Methode .ToString()
jedes SelectListItem
-Elements in der Sammlung aufruft, die "System.Web.Mvc.SelectListItemSystem"
zurückgibt (nicht der Wert der Eigenschaft Text
von SelectListItem
)
Am besten füllen Sie die zweite Dropdown-Liste aus, indem Sie json mit der Sammlung der Städte zurückgeben und das DOM im Ajax-Erfolgsrückruf aktualisieren. Es gibt keinen Grund, ein SelectList
zu erstellen - es ist einfach unnötiger zusätzlicher Aufwand und Sie geben mindestens 3 mal so viele Daten an den Client zurück, wie nötig (der Client hat kein Konzept einer C # SelectListItem
-Klasse.
Dann im Skript (nicht sicher, warum Sie den Standard id
von id="StartPointProvince"
auf id="province_dll"
geändert haben, aber)
Bearbeiten
Wenn die Datenbank neben den Kommentaren von OP einen Tabellennamen Cities
mit den Feldern ID
und Name
enthielt, dann wäre die Controller-Methode etwas wie
und das Skript zum Erstellen der Optionen wäre
%Vor%Können Sie Folgendes versuchen?
Dies ist ein Beitrag, den ich vor einigen Tagen geantwortet habe. Schriftart: Dynamische DropDownListen in MVC 4-Formular
Sie sollten einen Ajax-Aufruf im Änderungsereignis der Provinz-ddl erstellen. Dieser Anruf fordert eine Aktion an und gibt die Städte der ausgewählten Provinz zurück.
%Vor%In der Aktion:
%Vor%Tags und Links asp.net-mvc c# jquery ajax