ASP.NET MVC DropDownList: Immer den Ausgewählten Text (nicht den Wert)
Once upon a time, hatte ich eine DropDownList mit Optionen erstellt mit diesem code:
<%= Html.DropDownList("SomeName", someSelectList)%>
erzeugte HTML wie diese:
<select id="SomeName" name="SomeName">
<option>ABC</option>
<option>DEF</option>
<option>GHI</option>
<option>JKL</option>
</select>
Formular würde immer wieder eine der oben genannten Optionen zu meiner Klasse, die public-member - "Irgendetwas" über ModelBinding. Meine interne Validierung code würde dann wählen Sie den korrekten numerischen Wert aus einem internen Wörterbuch. Das Leben war gut.
Dann wurde ich gefragt, zeigen die numerischen Werte, wie Sie waren ausgewählt, die über Javascript/JQuery in einer separaten Textbox. So, jetzt habe ich die folgenden Optionen:
<select id="SomeName" name="SomeName">
<option value="50">ABC</option>
<option value="10">DEF</option>
<option value="25">GHI</option>
<option value="10">JKL</option>
</select>
und den folgenden JQuery-code:
$(document).ready(function() {
$('#SomeName').change(function() {
$("input#someNumber").val($('#SomeName').val());
});
});
Benutzer wählt den String und zeigt den numerischen Wert in das Feld ein. Toll.
Das problem ist jetzt, dass wenn das Formular abgeschickt wird, werden die Modell-Bindung wird der numerische Wert (zB. 50) eher als der String (zB. ABC)
Wie kann ich über-fahren Sie dieses Verhalten und bekommen die ausgewählte String wieder?
Die Zahl ist nicht eindeutig. Einige Text-Optionen haben die gleiche Nummer. Das Modell (Klasse) , mit dem ich arbeite muss sowohl der Text und die Anzahl. Und beide müssen für den Benutzer sichtbar sein, wie Sie arbeiten. Ich hatte vorher die Anzahl zeigen sich nach einer post-zurück, um zu überprüfen, aber meinen Nutzern gefiel dies nicht und wollen, dass alles Javascripty slick.
InformationsquelleAutor Pretzel | 2010-10-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Brezel - versuchen:
in der Tat, die Kombination aus dem vor-und
$("#SomeName").val();
sollte Ihnen alles, was Sie brauchen.cheers...
ich bin verwirrt. ich dachte, das Problem entstand aus der 'neue' Anforderung '...zeigen die numerischen Werte, wie Sie waren ausgewählt, die über Javascript/JQuery' - doh 🙂
wenn javascript wurden angenommen, Sie haben eine ganze Reihe von Optionen. ich weiß, wir sprechen über progressive enhancement, aber einige Dinge kann regressively malen Sie in eine Ecke, es sei denn, einige minimale 'Begriff' ist. ich weiß, das die harte Weise, als hatte ich den Auftrag zu erteilen, javascript als eine Anforderung für eine Website, an der wir arbeiten gerade jetzt, als die Funktionalität war gerade dabei zu restriktiv zu enthalten, innerhalb der 'no-js' - box. natürlich, Ihr Fall variieren können (und schön, wenn es funktioniert), aber in unserem Fall, wir zeigten zu viele jquery-goodies für die beteiligten zu ignorieren 🙂
ja, gut, ich bin ein bisschen ein n00b, wenn es um moderne web-2.0-Entwicklung. Also ich bin immer noch herauszufinden, was realistisch ist und was nicht. Ich habe gesagt, zu betreiben, unter der Annahme, dass Javascript funktioniert wahrscheinlich, aber wenn es nicht funktioniert, dann ist die app besser zu degradieren anmutig. Ergo, ich kann nicht Sie verlassen sich auf JS zum Auffüllen der Felder für die Benutzer.
das ist fair genug. in diesem Fall, eine 'Seite' Anregung sein kann, um code, der den Wert der wählen Sie mit den beiden relevanten Daten, Werte und analysieren Sie auf der server-Seite. so etwas wie <option value="25#GHI">GHI</option> könnte der Weg zu gehen. tho natürlich, Sie würden dann analysieren Sie die Zahl aus der textbox angezeigt, das js aktiviert Benutzer (tho diese immer noch hat mich verblüfft, d.h., dass ein besonderes Privileg ist, in Bezug auf die Darstellung in der textbox). ich Folge diesem thread, um zu sehen, wie Sie es lösen können, wie es ist ein ungewöhnliches Szenario. alle die wieder am besten - jim
InformationsquelleAutor jim tollan
Wenn ein Formular gepostet, die Wert der ausgewählten
option
wird immer zurück gebucht. Um den text deroption
können, benötigen Sie eine server-side-lookup-Tabelle entsprechen die numerischen Werte mit Namen. Alternativ können Sie Ihreselect
zurück, wie es ursprünglich war und eine lookup-Tabelle in JavaScript land zu zeigen, den numerischen Wert anstatt als Platzierungvalue
Attribute auf Ihre Optionen.InformationsquelleAutor Jacob
Brezel,
als ich kurz erwähnt in dem Kommentar, Sie sollte 'grace' den 0,1% der nicht-js-Nutzer mit einer 'Nachricht', wenn Sie nicht haben js aktiviert. hier ist, was ich haben sofort nach der
<body>
tag in meine Vorlagen:und diese können zusätzlich gestylt durch die Verwendung der css-nostyle Sachen:
oder mithilfe der bessere Ansatz ist die Verwendung einer definierten Klasse:
etc, etc...
cheers wieder
InformationsquelleAutor jim tollan