Wie wird das Dropdown-Menü ASP MVC-Formular auf leer gesetzt, aber nur, wenn der zugrunde liegende Wert nicht initialisiert ist?

8

Wir haben ein einfaches ASP.NET MVC-Formular mit vielen Feldern. Das erste Feld ist das wichtigste und es ist eine Dropdown-Liste. Sagen wir es ist das Firmenfeld und es enthält zwei Werte "Coca Cola" und "Pepsi".

Das Firmenfeld sieht folgendermaßen aus:

%Vor%

Weil es wichtig ist, dass diese Wahl aktiv gemacht wird und nicht einfach auf "Coca Cola" zurückbleibt, einfach weil es zuerst alphabetisch ist, müssen wir das Feld zuerst leer sein (Validierungsdaten-Annotationen sorgen dafür, dass der Benutzer gezwungen wird, etwas in).

Dies ist mit Javascript einfach so gemacht:

%Vor%

Es gibt jedoch einige Fälle, in denen das Formular nicht vollständig leer geladen wird, stattdessen wird das Firmenfeld im Controller wie folgt initialisiert:

%Vor%

und in solchen Fällen wollen wir natürlich nicht, dass das Javascript ausgeführt und gelöscht wird.

Was ist die normale Lösung in solchen Fällen?

    
hawbsl 16.10.2013, 13:06
quelle

5 Antworten

3

Meine Vermutung war richtig: Die DropDownListFor erzeugt das Attribut selected nicht, wenn der Anfangswert null ist.

Bei leerer Firma erzeugt es folgendes HTML:

%Vor%

Bei ausgewählten Unternehmen ist der HTML-Code anders:

%Vor%

So können Sie diesen JavaScript-Code verwenden und es wird funktionieren:

%Vor%

Auch wenn Ihre jquery-Version älter als 1.9.0 ist, funktioniert der Ausdruck option[selected] möglicherweise nicht richtig. Der Fehler ist in 1.9.0 behoben, aber in früheren Versionen funktionierten Funktionen wie 'filter', 'children' und 'is' falsch, während 'find' und 'has' ein korrektes Ergebnis zurückgegeben haben.

    
vorrtex 26.10.2013, 20:11
quelle
1

Ich hatte vor ein paar Tagen ein ähnliches Problem, als ich mein Dropdown auf den ersten Index setzen wollte, es sei denn, es wurde irgendwann ausgewählt. Ich habe eine Session-Variable als Abhilfe verwendet ... so etwas könnte den Trick bewirken:

%Vor%

... und für die Aktion Index () des aktuellen Controllers:

%Vor%

Im Wesentlichen setze ich den aktuellen Wert des Dropdowns auf den Wert der Sitzungsvariablen. Wenn ich den Dropdown-Wert ändern möchte, weise ich der Session var einfach einen neuen Wert zu! Während die Sitzungsvariable null oder wertlos ist, setze das Dropdown auf meinen gewünschten Index.

Hoffe, das hilft.

    
Mike H. 16.10.2013 13:22
quelle
1

Hier ist eine saubere Möglichkeit, das zu tun:

Fügt der Liste ein optionales Label hinzu, das ausgewählt wird, wenn der Modell-Firmenwert leer ist, ansonsten wird der aktuelle Wert vorgewählt angezeigt (keine Notwendigkeit für den javaScript-Select-Code), auch wenn der Benutzer keinen Wert he auswählt kann die Validierung nicht bestehen:

%Vor%     
Chtiwi Malek 22.10.2013 13:23
quelle
1
%Vor%

"- Getränk auswählen -" Wird angezeigt, wenn das ausgewählte Element nicht eingestellt ist.

(Code wird nur kurz in View geschrieben)

    
Francis 26.10.2013 22:10
quelle
1

OPTION 1:

Sie können die Logik in die Aktionsmethode im Controler einfügen.

Beispiel: Controller

%Vor%

Firma Klasse

%Vor%

In Ihrer Form (Beachten Sie, dass das optionale Label bei einem Sonderfall nicht angezeigt wird)

%Vor%

OPTION 2:

Erstellen Sie eine benutzerdefinierte Dropdown-Liste (benutzerdefinierter HTML-Helfer)

Bitte beachten Sie die folgenden Links. Link 1 link 2

    
Haritha 29.10.2013 06:29
quelle

Tags und Links