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

wenn, wie Sie Sie nennen RefreshPage Funktion?
Blick auf die ASPX-SEITE - code. Es ist eine Methode, die für die DropDownList.

InformationsquelleAutor SWA | 2013-07-04

Schreibe einen Kommentar