ViewState, UserControl und IsPostback

Viewstate.Remove("IsUserControlpostback");

Grundsätzlich habe ich eine Dropdown-Liste und ein dynamisch hinzugefügtes Benutzersteuerelement. Das Benutzersteuerelement lädt eine Rasteransicht, abhängig von der Auswahl, die in der Dropdownliste getroffen wurde. Die Dropdownliste ist nicht Teil des Benutzersteuerelements.

Nun stellt sich die Frage, wie ich jedes Mal, wenn der Benutzer die Auswahl in der Dropdown-Liste ändert, (isControlPostback = false) simulieren? Es sieht so aus, als ob Sich ViewState an das Steuerelement erinnert.

In meinem Benutzersteuerelement habe ich:

protected bool IsUserControlPostBack
{
    get
    {
        return this.ViewState["IsUserControlPostBack"] != null;
    }
}

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsUserControlPostBack)
    {
        ViewState.Add("IsUserControlPostBack", true);
        //load stuff in the grid view and bind it
    }
}

Wenn der Benutzer die Auswahl in der Dropdown-Liste ändert, habe ich ein Javascript-Bestätigungsfeld, und die Seite postet zurück. Das OnSelectedIndexChanged-Ereignis für die Dropdown-Liste wird also nicht ausgelöst. Ich möchte entfernen, um so etwas zu tun, jedes Mal, wenn sich der ausgewählte Index ändert:

Antwort auf "ViewState, UserControl und IsPostback " 4 von antworten

Fügen Sie das Steuerelement irgendwann vor OnLoad zur Seite hinzu. Z.B. OnInit. Zwischen OnInit und OnLoad wird der Ansichtszustand geladen und Postbackereignisse ausgeführt.

Sie können Änderungen am Steuerelement im Prerender-Ereignis vornehmen. Wenn dieses Ereignis ausgelöst wird, werden alle anderen Aktionen ausgeführt. Oder Sie können öffentliches Eigentum in der Benutzersteuerung tun und wenn die Einstellung erforderlich ist, um Wert zu bewerten, reagieren Sie entsprechend.

Beachten Sie, dass Context.Items nicht

Der ViewState, auf den Sie in Ihrem Benutzersteuerelement zugreifen, ist nicht derselbe, auf den Sie auf der Seite zugreifen. Wenn Sie Ihre Seite benötigen, um mit Ihrem Benutzersteuerelement zu kommunizieren, schlage ich vor, dass Sie zu diesem Zweck eine öffentliche Methode zu Ihrem Benutzersteuerelement hinzufügen.

Wenn Sie aus irgendeinem Grund etwas Ähnliches wie Ihr ViewState zwischen Anforderungen beibehalten werden.

können Sie Context.Items ausprobieren.

Für alle, die daran interessiert sind, die Antwort zu kennen: Ich habe schließlich eine öffentliche Eigenschaft innerhalb der Benutzersteuerung implementiert und das Steuerelement in die Dropdownliste des Servers SelectedIndexChanged statt OnInit geladen. Dadurch entfällt die explizite Verwendung von Viewstate.