Wiederherstellen einer Dropdown-Element ausgewählt nach dem postback
DIE IDEE
Ich versuche zu tun, eine sehr einfache Sache - die Seite aktualisieren, wenn ein Element aus der drop-down-Liste ausgewählt ist. Ausgewählten Eintrag der dropdownlist übergeben wird, den query-string als parameter. Seite neu geladen. Dann parameter entnommen query-string und Wiederherstellung der Auswahl in der Dropdown-Liste. Parameter hält den Wert des ausgewählten Elements.
DAS PROBLEM
Real ausgewählte Wert wird nicht an die query-string-parameter, es ist immer "0". DropDownList bekommt nie das Letzte ausgewählte Element, indem Sie es immer wieder die eine, die gespeichert wird in ViewState. ViewState nicht erinnern wollen neue Sachen, es hält immer ein und die gleiche info. Ich habe versucht, um die Lösung zu finden, die für Monate. Auf einigen Seiten funktioniert es, aber in den meisten Fällen funktioniert es nicht. Ob es geklappt hat, irgendwo in meinem web-app, die ich komplett hatte keine Ahnung, warum, und hoffte, es würde weiterhin die Arbeit am nächsten Tag. Manchmal ist es einfach aufgehört zu arbeiten und ich war nicht in der Lage, es zu beheben.
STANDARDMÄßIGE ASPX-SEITE
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="ExperimentalPage.aspx.cs"
Inherits="ExperimentalPage" Title="Enperimental Page" EnableViewState="True" %>
<asp:Content ID="ExperimentalLeftPane" ContentPlaceHolderID="cph_LeftPane" Runat="Server">
<div style="position: absolute; left: 0px; top: 35px; width: 250px;">
<asp:DropDownList ID="dd1" runat="server" OnSelectedIndexChanged="RefreshPage" AutoPostBack="True" CssClass="class_DropDown" Style="width: 250px; margin-bottom: 3px;"/>
</div>
</asp:Content>
DEFAULT ASPX.CS CODE-BEHIND-SEITE
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
dd1.Items.Insert(0, "dd1-0");
dd1.Items[0].Value = "0";
dd1.Items.Insert(1, "dd1-1");
dd1.Items[1].Value = "1";
dd1.Items.Insert(2, "dd1-2");
dd1.Items[2].Value = "2";
}
else
{
dd1.SelectedIndex = dd1.Items.IndexOf(dd1.Items.FindByValue(Convert.ToString(Request.QueryString["dd1"])));
}
}
protected void RefreshPage(object o, EventArgs e)
{
Page.Response.Redirect("ExperimentalPage.aspx?"
+ "&dd1=" + dd1.SelectedValue);
}
VERSUCHT, DAMIT ES FUNKTIONIERT
Szenario 1. EnableViewState="True"
Wähle ich den Dritten Eintrag (mit dem Wert "2") der dropdownlist, Seite neu geladen. Query-string nimmt nie den Wert "2". Es ist immer "0". Das erste Element ist immer ausgewählt nach dem postback, vielleicht, weil der ViewState, der zurückgesetzt.
Szenario 2. EnableViewState="False"
Ausgewählte Wert nicht gespeichert. DropDownList ist komplett leer nach dem postback.
Szenario 3. EnableViewState="False". Dropdownlist mit Daten befüllt ist auf jeder Seite zu laden. Postback wird nur überprüft, die für das abrufen ausgewählte Wert:
protected void Page_Load(object sender, EventArgs e)
{
//if (!Page.IsPostBack)
//{
dd1.Items.Insert(0, "dd1-0");
dd1.Items[0].Value = "0";
dd1.Items.Insert(1, "dd1-1");
dd1.Items[1].Value = "1";
dd1.Items.Insert(2, "dd1-2");
dd1.Items[2].Value = "2";
//}
//else
if (Page.IsPostBack)
{
dd1.SelectedIndex = dd1.Items.IndexOf(dd1.Items.FindByValue(Convert.ToString(Request.QueryString["dd1"])));
}
}
In diesem Fall gewählte Wert wird nie gespeichert, um die Abfrage-string und dropdown-Element ausgewählt ist nie restauriert.
EINE GROßE FRAGE
Was vermisse ich und wie zu machen, damit der ausgewählte Wert, und stellen Sie Sie nach dem postback?
DAS PROBLEM TEILWEISE GELÖST
Siehe meine Antwort
Blick auf die ASPX-SEITE - code. Es ist eine Methode, die für die DropDownList.
InformationsquelleAutor SWA | 2013-07-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok, ich habe verstanden, wie es zu beheben. Wenn jemand es braucht, das ist die Lösung.
In dieser Lösung EnableViewState Seite Eigenschaft ist Wahr.
Es gibt keine Seite Umleitung. Query-string wird nicht verwendet. Stattdessen Sitzung variable verwendet wird. Dies ist ein guter Weg, um Werte während der postback.
InformationsquelleAutor SWA
Wenn Sie wählen Sie ein Element aus der dropdown-Liste auswählen, Sie schlagen die
Page_Load()
vor derRefreshPage()
MethodeDas bedeutet, dass Sie diese Zeile ausführen, bevor die RefreshPage Methode:
Konvertieren.ToString(Request.QueryString["dd1"])) ausgewertet zu null, also SelectedIndex auf 0 gesetzt.
Wenn Sie möchten, um diese Arbeit zu machen, sollten Sie Folgendes versuchen:
InformationsquelleAutor michaeldk