Popup DropDownList mit AJAX MVC 4

9

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:

%Vor%

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.

    
Marnus Steyn 06.05.2015, 18:16
quelle

3 Antworten

23

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.

%Vor%

Dann im Skript (nicht sicher, warum Sie den Standard id von id="StartPointProvince" auf id="province_dll" geändert haben, aber)

%Vor%

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

%Vor%

und das Skript zum Erstellen der Optionen wäre

%Vor%     
Stephen Muecke 07.05.2015, 01:23
quelle
4

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%     
Márcio Gonzalez 06.05.2015 18:21
quelle
1

Machen wir es einfacher

  • Schritt 1: Serverseitige Funktion / Daten

    %Vor%
  • Schritt 2: Clientseitige Funktion / Dateninterpreter

    %Vor%
  • Schritt 3: Call - clientseitige Funktion / start

  • Liste 1:

    %Vor%
  • Liste 2:

    %Vor%
Kedar9444 22.12.2016 12:33
quelle

Tags und Links