Sie sind zurzeit offline. Es wird auf die erneute Herstellung einer Internetverbindung gewartet.

PRB: ASP.NET löst Das Change-Ereignisse aus, wenn Sie den Kontrolle-Wert nicht ändern

Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.

314809
Problembeschreibung
Wenn Sie die Steuerung nicht ändern, löst ASP.NET unter bestimmten Umständen das Das Change-Ereignis für ein Asp.net-webanwendungssteuerelement aus.
Ursache
Um Anzeigestatus zu verwenden, basieren einige Steuerelemente, wie dem Ereignis in einem Steuerelement oder dem Ereignis in einem Boxsteuerelement auf der Registrierung des Das Change-Ereignisses. Dieses Problem tritt auf, wenn Sie diese Steuerelemente dynamisch erstellen, nachdem das Ereignis verknüpft wird.

Wenn ASP.NET die Seite an dem Browser darstellt, verfügt das Steuerelement, das dynamisch erstellt wird, nicht über ein gehören Das Change-Ereignis. ASP.NET speichert den Anzeigestatus nicht, weil kein Ereignis vorhanden ist. Das wird als View State Optimization bezeichnet.

ASP.NET erwartet Anzeigestatus, wenn die Seite wieder gesandt und wenn die Ereignisse verknüpft werden aber findet, kein ist vorhanden. Wenn das Steuerelement nicht geändert worden ist, löst dieser Unterschied das Das Change-Ereignis aus.
Lösung
Stellen Sie sicher, dass Sie das Das Change-Ereignis für das dynamisch erstellte Steuerelement verknüpfen, bevor ASP.NET die Seite darstellt. Das stellt sicher, dass Anzeigestatus für das Steuerelement vorhanden ist.
Status
Es handelt sich hierbei um ein beabsichtigtes Verhalten.
Weitere Informationen

Schritte zum Reproduzieren des Verhaltens

Erstellen Sie das Web Form

  1. Erstellen Sie eine neue Anwendung von Visual Basic ASP.NET mit Name ChangeFired.
  2. Öffnen Sie in dem Designer-Modus WebForm1. Ziehen Sie ein Steuerelement , ein Steuerelement und ein Steuerelement auf dem Formular.
  3. Klicken Sie in dem Dialogfeld auf , und klicken Sie dann auf . Behalten Sie die Standardname für alle Steuerelemente bei.
  4. Bearbeiten Sie die Tables-Auflistung von DataSet1. Fügen Sie eine neue Tabelle mit Name Table1 hinzu.
  5. Bearbeiten Sie die Columns-Auflistung von Table1. Fügen Sie eine neue Spalte hinzu, die Spalte1 genannt wird.
  6. Klicken Sie auf , und ändern Sie dann in dem die Eigenschaft.
  7. Klicken Sie mit der rechten Maustaste auf , zeigen Sie auf , und klicken Sie dann auf . Ziehen Sie in dem Abschnitt ein Steuerelement.
  8. Klicken Sie auf , und fügen Sie der Item-Auflistung dann fünf Elemente hinzu. Legen Sie den und den Eigenschaften dieser Elemente To fest one , two, three , four, Und five jeweils.
  9. Legen Sie für die Eigenschaft für DropDownList1 fest.
  10. Bearbeiten Sie die DataBindings-Auflistung von DropDownList1. Fügen Sie den folgenden benutzerdefinierten Bindungsausdruck auf der Eigenschaft hinzu:
    DataBinder.Eval(Container, "DataItem.Column1")					
  11. Wechseln Sie in die HTML-Ansicht Legen Sie das Attribut der auf wie folgt in der Direktive fest:
    <%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="ChangeFired.WebForm1" trace="true" %>					

Fügen Sie die CodeBehind-Datei hinzu

  1. Klicken Sie mit der rechten Maustaste auf WebForm1.aspx, und klicken Sie dann auf .
  2. Fügen Sie dem Ereignis den folgenden Code hinzu:
    DataSet1.Tables(0).Rows.Add(New Object() {"1"})DataSet1.Tables(0).Rows.Add(New Object() {"2"})DataSet1.Tables(0).Rows.Add(New Object() {"3"})DataSet1.Tables(0).Rows.Add(New Object() {"4"})If Not IsPostBack Then  DataBind()End IfDim objItem As DataListItemFor Each objItem In DataList1.Items  AddHandler CType(objItem.FindControl("DropDownList1"), _  DropDownList).SelectedIndexChanged, AddressOf DropDownList1_SelectedIndexChanged  If Not objItem.FindControl("DropDownList1") Is Nothing Then    Trace.Write("Added SelectedIndexChanged Handler")  End IfNext					
  3. Erstellen Sie eine neue Prozedur unterhalb des Ereignisses , um das Ereignis wie folgt zu bearbeiten:
    Private Sub DropDownList1_SelectedIndexChanged(ByVal sender As System.Object, _ByVal e As System.EventArgs)  DataBind()  Trace.Write("SelectedIndexChanged, DataBind()")  'Uncomment the following code to resolve this problem.  'Dim objItem As DataListItem  'For Each objItem In DataList1.Items  '  AddHandler CType(objItem.FindControl("DropDownList1"), _  '  DropDownList).SelectedIndexChanged, AddressOf DropDownList1_SelectedIndexChanged  'NextEnd Sub					

Ausführen des Beispiels

  1. Führen Sie die Seite aus Beachten Sie, dass das dynamisch erstellte Steuerelement Anzeigestatus in der Ablaufverfolgungsinformation für die Steuerelementstruktur enthält.

    Das tritt auf, da der Aufruf der Methode dynamisch die Steuerelemente erstellt und Sie das Ereignishandler verknüpfen, nachdem das in dem Ereignis aufruft. View State Optimization findet nicht statt, da die Steuerelemente ein Ereignishandler haben.
  2. Klicken Sie auf die Schaltfläche auf die Seite. Beachten Sie, dass wieder eine PLZ auftritt, und nur der Code innerhalb des Ereignisses ausgeführt wird. Anzeigestatus ist für die Steuerelemente vorhanden, da dem Steuerelement ein Ereignishandler zugeordnet wird.
  3. Ändern Sie den Wert in einem der Steuerelemente . Beachten Sie, dass wieder eine PLZ auftritt. Beachten Sie darüber hinaus, dass ASP.NET das Ereignis auslöst, und das Ereignis ausführt.
  4. Rufen Sie in dem Ereignis die Methode erneut auf, neue Steuerelemente zu erstellen.

    ASP.NET verwendet View State Optimization und speichert den Anzeigestatus für die neuen Steuerelemente nicht, da das Ereignis in diesen neuen Steuerelementen nicht verknüpft wird.
  5. Überprüfen Sie die Information der Ablaufverfolgung für die Steuerelementstruktur. Beachten Sie, dass die Steuerelemente Anzeigestatus nicht besitzen.
  6. Klicken Sie auf die Schaltfläche auf die Seite. Beachten Sie, dass wieder die PLZ auftritt, und beachten Sie dass ASP.NET das Ereignis ausführt. ASP.NET erwartet, da Sie das Ereignis zu den Steuerelementen verknüpfen, den Steuerelementen Anzeigestatus zugeordnet.

    Obwohl Sie ein Element nicht auswählen, löst ASP.NET das Ereignis jedoch aus, da Anzeigestatus nicht vorhanden ist.

Lösun

Dem Codes in dem Ereignis Kommentar- Sie, um dieses Problem zu beheben, damit die Ereignishandler mit dem neu erstellten Steuerelement verknüpft.
view state

Warnung: Dieser Artikel wurde automatisch übersetzt

Eigenschaften

Artikelnummer: 314809 – Letzte Überarbeitung: 05/03/2004 23:53:02 – Revision: 2.7

  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0
  • kbdatabinding kbevent kbprb kbservercontrols kbstate kbwebforms KB314809 KbMtde kbmt
Feedback
script>