2 Stimmen

Zwei Arten von Postback-Ereignissen

1) Ich habe zwei Artikel gefunden, die die beiden Arten von Postback-Ereignissen jeweils etwas anders kategorisieren:

Eine Ressource besagt, dass die beiden Arten von Postback-Ereignissen folgende sind Geändert Ereignis ( bei Steuerelementen, die IPostbackDataHandler implementieren ), das ausgelöst wird, wenn Daten zwischen Postbacks geändert werden, und werden dann Erhöht Ereignisse (wenn Steuerelemente IPostbackEventHandler implementieren), die von Server-Steuerelementen aus einem beliebigen Grund ausgelöst werden, den das Steuerelement für angemessen hält

In einem anderen Artikel heißt es, die beiden Arten seien Sofortige Antwort Veranstaltungen und Ändern Sie Ereignisse. Diesem Artikel zufolge sind sofortige Antwortereignisse solche, die tatsächlich ein Postback auslösen

a) Welche Einstufung ist richtig?

b) Wenn der zweite Artikel richtig war, dann wenn TextBox-Steuerelement hatte AutoPostBack="true", sollte nicht dann TextChanged auch als sofortige Antwort Ereignis?

2) Wenn die Seite aufgrund einer Benutzeraktion an den Server zurückgesendet wird, dann in der Phase der Ereignisbehandlung ASP.NET löst Ereignisse für alle Steuerelemente aus, deren Daten seit dem letzten Postback geändert wurden. Das Ereignis, das das Postback tatsächlich ausgelöst hat (z. B. das Klick-Ereignis), wird als letztes ausgelöst

a) Was aber, wenn der Benutzer eine Zeile in GridView auswählt und dadurch ein Postback ausgelöst wird? Wenn GridView einen Postback aufgrund einer Zeilenauswahl verursacht, dann führt dieser Postback im Gegensatz zu einfacheren Steuerelementen (wie TextBox oder Button) dazu, dass GridView nicht nur ein, sondern mehrere serverseitige Ereignisse während der Ereignisbehandlungsphase auslöst (SelectedIndexChaning und SelectedIndexChanged).

Welches dieser GridView-Ereignisse wird von ASP.NET als dasjenige betrachtet, das einen Postback verursacht hat?

Dankeschön

0 Stimmen

Auf welche Artikel beziehen Sie sich?

1voto

Das SelectedIndexChanged-Ereignis (bei einer Listbox) und das TextChanged-Ereignis (bei einer Textbox) werden bei einem Postback ausgelöst, auch wenn die Eigenschaft Autopostback falsch ist.

Versuchen Sie, dies in ein Formular einzutragen:

   <asp:ListBox runat="server" ID="test" 
        onselectedindexchanged="test_SelectedIndexChanged">
<asp:ListItem >number1</asp:ListItem>
 <asp:ListItem >number2</asp:ListItem>     
</asp:ListBox>

<asp:TextBox runat="server" ID="text" ontextchanged="text_TextChanged" />
<asp:Button runat="server" Text="Click Me" />

und dies im Code dahinter:

 protected void test_SelectedIndexChanged(object sender, EventArgs e)
    {
        Response.Write("SelectedIndexChanged");
    }

    protected void text_TextChanged(object sender, EventArgs e)
    {
        Response.Write("TextChanged");
    }

Führen Sie es dann aus, ändern Sie das ausgewählte Element, geben Sie einen Text ein und drücken Sie die Schaltfläche - beide Ereignisse werden ausgelöst. Sie können die Abfolge der Ereignisse mit Reflector sehen. Für die Textbox ist die Methode RaisePostDataChangedEvent:

 protected virtual void RaisePostDataChangedEvent()
{
    if (this.AutoPostBack && !this.Page.IsPostBackEventControlRegistered)
    {
        this.Page.AutoPostBackControl = this;
        if (this.CausesValidation)
        {
            this.Page.Validate(this.ValidationGroup);
        }
    }
    this.OnTextChanged(EventArgs.Empty);
}

0voto

Jason Punkte 49785

SelectedIndexChanging wird zuerst aufgerufen und ist in der Regel, wo ich jede Art von Updates machen. SelectedIndexChanged erfolgt NACH SelectedIndexChanging, so dass die Seite technisch gesehen SelectedIndexChanging als das Ereignis ansieht, das das Postback verursacht hat. Denken Sie daran, dass ein Postback auch den gesamten Lebenszyklus der Seite von Init bis Page_Load zu Ihrem Ereignis aufruft.

Die Eigenschaft autopostback lässt die Website wissen, dass ein Postback nach jeder Änderung erfolgen soll, sei es textchanged, selectedindexchanged, checkedchanged usw. Wenn die Eigenschaft autopostback nicht auf true gesetzt ist, werden diese Ereignisse nicht auftreten.

0voto

Kyle Ryan Punkte 4001

Zunächst einmal klingt es für mich so, als ob beide Einstufungen miteinander vereinbar sind, nur eben in einer anderen Form. Man könnte sagen, dass "Raised"-Ereignisse mit "Immediate Response"-Ereignissen gleichzusetzen sind, die nur in Steuerelementen möglich sind, die IPostbackEventHandler implementieren.

Also in Bezug auf 1b, wenn AutoPostBack = true, ich glaube, es stellt nur ein Javascript onchange-Ereignis, um einen Postback-Aufruf zu machen. Sobald das Postback ausgelöst wird, erkennt die Seite, dass das Textfeld geändert hat und führt das geänderte Ereignis. Somit ist dies immer noch nicht ein Raised Event. (Ich kann mich irren, aber so habe ich es verstanden.)

Ein Raise-Ereignis wird in der RaisePostBack-Methode eines Steuerelements ausgelöst (erforderlich für IPostBackEventHandler), die nach dem Ladezyklus der Seite erfolgt und jedes Änderungsereignis auslöst.

Unter der Haube kann ein Postback auf zwei Arten erfolgen: durch das Absenden des Formulars (asp:button mit Submit-Verhalten) oder durch einen Javascript-Aufruf _doPostBack (tritt in Steuerelementen auf, bei denen AutoPostBack=true ist, oder wenn Sie den Aufruf direkt mit Page.ClientScript vornehmen).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X