Wie kann ich einstellen, dropdownlist-default-Werte basierend auf Variablen?
Ich habe mehrere Seiten miteinander verknüpft, die ich pflegen wollen drop-down-Auswahl für. Ich habe gesehen, eine Reihe von Möglichkeiten, dies zu tun mit session-Werten, etc, aber ich möchte, um den Standard-Wert, während immer noch die option, andere Werte.
Effektiv ist, wird Benutzern die Auswahl auf Seite 1 und dann auf Seite 2 Sie verwenden diese gleiche Auswahl, aber auch möglicherweise möchten ändern Sie Ihre Auswahl. Mein Gedanke war, dass ich laden konnte die Auswahl in eine Tabelle in SQL in Seite 1 und dann Seite 2 aufrufen, die Tabelle und legen Sie die Werte als Variablen. Meine Frage ist also, wie würde ich die Standard-dropdown-Wert eine variable im Gegensatz zu einer eingestellten Wert.
Ich bin mit VisualStudio2010 mit ASP Webforms mit C#.
Jede Hilfe oder Anregungen wäre sehr geschätzt werden!
InformationsquelleAutor Kate | 2011-03-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde sicherlich eine Tabelle für, die. Ihre erste Vermutung mit sessions ist wohl richtig. Es scheint, dass Sie den Eindruck haben, dass Sie nicht ändern können, den session-Werten, aber...
Ihre Seiten sollten funktionieren genau wie du willst:
Haben die Benutzer Elemente auswählen auf Seite 1, dann speichern Sie die Werte in die session.
Dann auf Seite zwei, setzen Sie die Werte aus der session als default-Wert in der Dropdown-Liste. Wenn Sie ändern Sie Ihre Auswahl, einfach aktualisieren Sie die session-variable auf den neuen Wert.
Dann könnte man wiederholen ad infinitum.
BEARBEITEN:
Beispiele,
Setzen einer session-variable:
Session["DropDownValue1"] = DropDownList1.SelectedIndex;
Einstellung der Standard-valuie einer DropDown-Box:
DropDownList1.SelectedIndex = (int?)Session["DropDownValue1"] ?? 0;
Den
??
im zweiten Beispiel wird ein null-coalescing-operator. Es bedeutet, dass, wenn das Objekt, bevor es null ist, dann verwenden Sie stattdessen die Sache, die ist nach es.Verwenden Sie diese Beispiele in der code-behind-Datei
*.cs
Dann können Sie ein OnSelectedIndexChanged-Ereignis zu aktualisieren Sie Ihre session Variablen auf der zweiten Seite, nachdem der Benutzer änderungen, die er, wenn Sie mögen.
Dieses Attribut hinzufügen, um Ihre DropDownList in der
*.aspx
- Datei:OnSelectedIndexChanged="Index_Changed"
Mit event-handler-code in der code-behind -
*.cs
Datei:Ich habe aktualisiert die Antwort auf einige Beispiele. Lassen Sie mich wissen, wenn etwas unklar ist.
Vielen Dank für die Beispiele!!! Ein paar kurze Fragen: Was ist der Unterschied zwischen selectedindex und selectedvalue (ich war mit)? Außerdem würde ich den code für die Einstellung der Standard-Wert in beide Seite 1 und Seite 2, da wird es aktualisiert, auf beide Seiten? Auch, wo in der .cs hat die Einstellung default-Wert-code gehen? Ich versucht, indem in page_load und gab es mir einen Fehler. Gibt es ein anderes Ereignis, um es in? Nochmals vielen Dank!
sorry, es gab einen kleinen Fehler im Beispiel, müssen Sie die cast der Session-Wert zu
(int)
wenn Sie dieSelectedIndex
habe ich aktualisiert, die Antwort. Es sollte funktionieren in derPage_Load
Methode nun.SelectedIndex
ist die Position des ausgewählten Elements in der Liste, sagen index1
. Gewählte Wert ist der zugrunde liegende Wert des Elements, sagen"NewUser"
. So können Sie sehen, wäre es schwer, dieSelectedValue
(.NET-nicht bieten diese Funktion), aber ist sehr einfach zu speichern, und legen Sie dieSelectedIndex
(wie ich oben zeigte).Wenn ich versuche, bekomme ich die Fehlermeldung "Nur Belegung, call -, increment -, decrement-und neue Objekt-Ausdrücke können verwendet werden, wie eine Aussage" ich wechselte von == und = dann hab und der Fehler auf?????. Ich entfernte das Stück und dann ist es gegangen um die Werte zu speichern ab Seite 1 bis Seite 2, aber es immer noch nicht zulassen, mich zu ändern Sie die Auswahl auf Seite 2, und aktualisieren Sie den session-Wert. Irgendwelche Gedanken? Danke!
InformationsquelleAutor BinaryTox1n
Können Sie speichern Sie die
Session
wenn Sie wollen einfach nur weiterhin für die Laufzeit desSession
. Wenn Sie es wünschen, länger dauern, Sie könnte verwenden cookies, oder Sie müssen, um es zu speichern in einer Datenbank.Beim ersten laden Ihre
DropDownList
einfach überprüfen, um zu sehen, ob Sie standardmäßig den Wert durch eine Suche nach einer gespeicherten Voreinstellung:Wenn der Benutzer einen Wert auswählt und navigiert dann sollten Sie es speichern:
auf die gleiche Weise gespeichert, die es ursprünglich. Ziehen Sie einfach den Wert aus der
DropDownList
auf und speichern es:Session["DDL2Default"] = ddl2.SelectedValue;
DieSession
ist nur ein container, du kannst Lesen und schreiben, um es von jeder Seite-Ereignis.Wenn ich versuche, es setzt die Standardeinstellungen für die erste Zeile in der dropdownlist eher als zu dem, was ich tatsächlich ausgewählt.
Ich denke, Ihr fehlt etwas darüber, wie es funktioniert. Sie sind nur die Speicherung der Werte in der
Session
Objekt. Sie Lesen müssen, es aus der session und setzen der DDL an der korrekten ausgewählten Wert jedes mal neu zu erstellen oder anzuzeigen. Wenn Sie sind immer der erste ausgewählt ist, dann wird Sie entweder nicht die Einstellung des ausgewählten Elements korrekt, setzen den Wert, bevor Sie die DDL-gebaut wird,oder den Umbau der DDL-nachdem Sie den ausgewählten Eintrag.InformationsquelleAutor Kelsey
Einer Datenbank arbeiten würde, aber Sie könnte auch mit cookies oder der Session. Was Sie würden tun müssen, ist auf die Dropdown-Liste selectionchanged-Ereignis, speichern Sie diese Werte in die Session (z.B.). Dann, wenn die zweite Seite page_load-Ereignis ausgelöst wird, Lesen Sie die Session-Werte in.
Für eine drop-down-Liste können Sie den ausgewählten Wert ein Objekt oder eine Konstante/Wert.
Legen Sie den Session-Zustand nur durch speichern eines Objekts gibt. Also auf der ersten Seite schreiben Sie sich 'Session["myKeyName"] = lstDropDown.SelectedValue; ' in der code-behind-Seite, und dann, was ich früher schrieb, auf der zweiten Seite. Der Schlüssel, den Sie verwenden, ist bis zu Ihnen, so wird es nicht ändern basiert auf der drop-down-Namen.
Ich legte 'Session["PAG"] = DdlPAG.SelectedValue;' in meinem page_load der Seite 1 und if (Session["PAG"] !=null {DdlPAG.SelectedValue = Session["PAG"].ToString(); }' in meiner Seite 2 Page_Load. Es funktioniert, speichern Sie die Werte von Seite 1 auf Seite 2, aber wenn ich versuche, ändern Sie die Auswahl auf Seite 2, schaltet es zurück auf die session-variable. Gibt es eine Möglichkeit, die Auswahl auf Seite 2, überschreiben und ändern Sie die session-variable?
Wenn man das tut, nach dem postback der dropdown-Liste geändert wird, legen Sie es zurück in die Mappe. In dem Page_Load-Ereignis hinzufügen', if (!Seite.IsPostBack()) { ... } ' um Ihren code, wo Sie sind, Lesen Sie den Wert aus der session aus. So postback die Sie nicht verlieren die Daten, sondern auf das erstmalige laden der Seite, die Sie Lesen, aus der Sitzung.
Wenn ich versuche, dass der code, es gibt mir die Meldung "Non-invocable Mitglied" - System.Web.UI.Seite.IsPostBack' kann nicht verwendet werden, wie eine Methode"
InformationsquelleAutor Thyamine
Können Sie weiterhin verwenden Session-Variablen.
In der
Page_Load
, legen Sie das drop-down-Liste istSelectedValue
:Bearbeiten
Natürlich. Aktualisieren Sie einfach die variable in der
myDropDownList_OnSelectedChange()
event-handler. Sie müssen sicherstellen, dass der andere code, mit dem Sie den Wert von Seite 1 in derPage_Load
in einemif(!IsPostBack)
um zu verhindern, dass der dropdownlist aus nicht aktualisieren.Siehe edit oben.
InformationsquelleAutor Marcus
Dank, jeder! Es funktioniert jetzt. Im Fall, jemand läuft in diesem, hier ist was ich landete mit:
Seite 1 und Seite 2 CodeBehind in Page_Load Abschnitt:
Nochmals vielen Dank!
InformationsquelleAutor Kate