Was ist der Zweck von EnableEventValidation und wie funktioniert es?

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" onrowediting="GridView1_RowEditing">
        <Columns>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:Button ID="btnEdit" runat="server" Text="Edit" CommandName="Edit" />
                    <asp:Label ID="lblFirstColumn" runat="server" Text='<%# Eval("FirstColumn") %>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:Label ID="lblEditMode" runat="server" Text="This is Edit mode"></asp:Label>
                </EditItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>


protected void Page_Load(object sender, EventArgs e)
{
    DataTable dt = new DataTable();
    dt.Columns.Add("FirstColumn", typeof(int));
    dt.Rows.Add(100);

    GridView1.DataSource = dt;
    if (!IsPostBack)
        GridView1.DataBind();
}

protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
    GridView1.EditIndex = e.NewEditIndex;
    GridView1.DataBind();

}

Wenn ich ändereif (!IsPostBack) GridView1.DataBind(); zuGridView1.DataBind(); und versuche, GridView in den Bearbeitungsmodus zu versetzen, indem du auf btnEdit klickst. Dann erhalte ich die Ausnahme:

Ungültiges Postback- oder Callback-Argument. Die Ereignisüberprüfung wird in der Konfiguration oder mit <% @ Page EnableEventValidation = "true"%> auf einer Seite aktiviert. Aus Sicherheitsgründen wird mit dieser Funktion überprüft, ob Argumente für Postback- oder Callback-Ereignisse von dem Serversteuerelement stammen, von dem sie ursprünglich gerendert wurden. Wenn die Daten gültig und erwartet sind, verwenden Sie die ClientScriptManager.RegisterForEventValidation-Methode, um die Postback- oder Callback-Daten für die Validierung zu registrieren.

Aber wenn ichEnableEventValidation zufalse, dannGridView1 wechselt nicht in den Bearbeitungsmodus (dh -GridView1_RowEditing wird nicht aufgerufen).

BTW - dasselbe Problem tritt auch bei anderen datengebundenen Steuerelementen (DataList, DetailsView) auf.

Seite. EnableEventValidation ruft einen Wert ab oder legt einen Wert fest, der angibt, ob die Seite Postback- und Callback-Ereignisse überprüft. Wenn die EnableEventValidation-Eigenschaft auf true festgelegt ist, überprüft ASP.NET, ob ein Steuerelementereignis von der Benutzeroberfläche stammt, die von diesem Steuerelement gerendert wurde. Ein Steuerelement registriert seine Ereignisse während des Renderns und validiert die Ereignisse dann während des Postback- oder Callback-Handlings.

a) Warum müssen Postback- und Callback-Ereignisse ausgewertet werden? und wie genau erfolgt die auswertung?

b) Warum würde @ anrufGridView1.Databind() bei jedem Postback verursacht eine Ausnahme, wenn versucht wird, es in @ zu setzeedit mode?

c) Ich sehe auch keine Gründe für die Deaktivierung vonEnableEventValidation verhindert, dass GridView @ eingiedit mode ?! Also, warum hat

Dank

Antworten auf die Frage(2)

Ihre Antwort auf die Frage