为什么不能在 Page_Load 中绑定数据源

作者:vkvi 来源:ITPOW(原创) 日期:2008-1-21

ASP.NET 2.0 之后,数据库程序变得简单,通过简单的配置就可实现一个数据库应用程序管理。这其中最重要的就是 SqlDataSource 和 GridView。

在 SqlDataSource 中明确数据库连接字符串并指明 select、update、delete 语句,GridView 再绑定 SqlDataSource,就可以轻松实现数据管理了。

我们有时也希望通过程序来绑定,比如根据不同的用户实现不同的 select 语句,如下例:

SqlDataSource1.SelectCommand = @"select * from tbl where userName='" + userName + @"'";
GridView1.DataSourceID = "SqlDataSource1";
GridView1.DataBind();

以上这段代码写在 Page_Load 中是错误的,为什么呢?

一、通过 GridView 更新、删除记录时,是在 Page_Load 之后发生的,也就是说 GridView 数据的填充总是在记录的更新、删除之前,记录被更新、删除之后不能立即在 GridView 中表现出来。

二、记录更新之前,由于 GridView 又重新读取了,造成了 ASP.NET 认为数据是从第三方提交的,由于 enableEventValidation 的安全限制,将拒绝执行更新操作。错误信息如下:

回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。

那么这段代码该写在哪里呢?

可以写在 Page_LoadComplete、Page_PreRender 或 Page_PreRenderComplete 中。

相关阅读

相关文章