EnableEventValidation的目的是什么?它是如何工作的?

时间:2010-10-11 19:01:01

标签: asp.net

    <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();

}

如果我将if (!IsPostBack) GridView1.DataBind();更改为GridView1.DataBind();并尝试通过单击btnEdit将GridView置于编辑模式,则会出现异常:

  

无效的回发或回调参数。   使用启用事件验证      在配置或&lt;%@ Page   EnableEventValidation =“true”%&gt;在一个   页。为安全起见,这个   功能验证参数   回发或回调事件源自   从服务器控制那个   最初渲染它们。如果数据   是有效的和预期的,使用   ClientScriptManager.RegisterForEventValidation   注册方法   回发或回调数据   验证

但如果我将EnableEventValidation设置为false,则GridView1将不会进入编辑模式(即 - GridView1_RowEditing不会被调用)。

BTW - 其他数据绑定控件(DataList,DetailsView)也会出现同样的问题

  

页。 EnableEventValidation获取或   设置一个值,指示是否   页面验证回发和回调   事件。当EnableEventValidation时   属性设置为true,ASP.NET   验证控件事件   源于用户界面   由该控件呈现的。一个   控制在其中记录其事件   渲染然后验证   回发或回调期间的事件   处理

a)为什么必须评估回发和回调事件?以及评估究竟是如何发生的?

b)为什么在每次回发时调用GridView1.Databind()会导致尝试将其置于edit模式时出现异常?

c)我也没有看到任何禁用EnableEventValidation阻止GridView进入edit模式的原因?!那么为什么呢

谢谢

1 个答案:

答案 0 :(得分:2)

有一篇很好的文章介绍了如何以及为什么要在此处使用EventValidation:

http://odetocode.com/blogs/scott/archive/2006/03/21/asp-net-event-validation-and-invalid-callback-or-postback-argument-again.aspx

和MSDN:

http://msdn.microsoft.com/en-us/library/system.web.ui.page.enableeventvalidation.aspx

简短的回答是事件验证旨在保护网站不会将值注入页面,以便以某种方式利用您的应用程序。