EnableEventValidation的用途是什么?它的工作原理是什么?

EnableEventValidation的用途是什么?它的工作原理是什么?

问题描述:

<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();并试图把GridView控件进入编辑模式,通过点击btnEdit,然后我得到的异常:EnableEventValidation的用途是什么?它的工作原理是什么?

无效的回发或回调参数。 在配置中使用 或 页面中的EnableEventValidation =“true”%>启用了事件验证。为了安全起见,此 功能验证参数 回发或回调事件从 最初呈现它们的服务器控件发起 。如果数据 有效并且是预期的,请使用 ClientScriptManager.RegisterForEventValidation 方法来注册 回发或回调数据以验证 。

但如果我设置EnableEventValidationfalse,然后GridView1不会进入编辑模式(即 - GridView1_RowEditing不会被调用)。

顺便说一句 - 相同的问题也会发生与其他数据绑定控件(DataList的,的DetailsView)

页。 EnableEventValidation获取或 设置一个值,该值指示 页面是否验证回发和回调 事件。当EnableEventValidation 属性设置为true,ASP.NET 验证了控制事件 起源于被通过控制渲染用户界面 。一个 控制期间 渲染注册其事件,然后回发或回调 处理过程中验证 事件。

一)为什么必须回发和回调的事件进行评估?以及评估如何发生?

b)为什么每次回发时都会调用GridView1.Databind()导致异常,当试图将它放入edit模式?

c)我也看不到任何原因,为什么禁用EnableEventValidation阻止GridView进入edit模式?!因此,何必当初

谢谢

有一个关于你将如何以及为何要使用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

简短的回答是事件验证是为了保护网站而设计的注入页面的值可以用来以某种方式利用您的应用程序。

+1

嗨,我希望我不会太迟与我的回复......反正......好文章,但我仍然不明白为什么会重新绑定GridView的回发导致HTML页面发回服务器(当试图把GridView进入编辑模式)Asp.Net不允许的值? – user437291 2010-10-20 16:57:26