<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 方法來註冊 回發或回調數據以驗證 。
但如果我設置EnableEventValidation
到false
,然後GridView1
不會進入編輯模式(即 - GridView1_RowEditing
不會被調用)。
順便說一句 - 相同的問題也會發生與其他數據綁定控件(DataList的,的DetailsView)
頁。 EnableEventValidation獲取或 設置一個值,該值指示 頁面是否驗證回發和回調 事件。當EnableEventValidation 屬性設置爲true,ASP.NET 驗證了控制事件 起源於被通過控制渲染用戶界面 。一個 控制期間 渲染註冊其事件,然後回發或回調 處理過程中驗證 事件。
一)爲什麼必須回發和回調的事件進行評估?以及評估如何發生?
b)爲什麼每次回發時都會調用GridView1.Databind()
導致異常,當試圖將它放入edit
模式?
c)我也看不到任何原因,爲什麼禁用EnableEventValidation
阻止GridView進入edit
模式?!因此,何必當初
謝謝
嗨,我希望我不會太遲與我的回覆......反正......好文章,但我仍然不明白爲什麼會重新綁定GridView的回發導致HTML頁面發回服務器(當試圖把GridView進入編輯模式)Asp.Net不允許的值? – user437291 2010-10-20 16:57:26