2010-10-11 137 views
2
<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模式?!因此,何必當初

謝謝

回答

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

簡短的回答是事件驗證是爲了保護網站而設計的注入頁面的值可以用來以某種方式利用您的應用程序。

+1

嗨,我希望我不會太遲與我的回覆......反正......好文章,但我仍然不明白爲什麼會重新綁定GridView的回發導致HTML頁面發回服務器(當試圖把GridView進入編輯模式)Asp.Net不允許的值? – user437291 2010-10-20 16:57:26

相關問題