<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
模式的原因?!那么为什么呢
谢谢
答案 0 :(得分:2)
有一篇很好的文章介绍了如何以及为什么要在此处使用EventValidation:
和MSDN:
http://msdn.microsoft.com/en-us/library/system.web.ui.page.enableeventvalidation.aspx
简短的回答是事件验证旨在保护网站不会将值注入页面,以便以某种方式利用您的应用程序。