ASP.NET在OnPreInit之前处理按钮单击事件

时间:2010-03-18 20:27:00

标签: c# asp.net collections

我有数据访问层,业务逻辑层和表示层(即页面本身)。

我处理OnPreInit事件并填充页面所需的集合。所有数据都来自SQL服务器数据库,我不使用缓存。

我处理按钮单击事件以从表单中获取值并将新对象插入数据库。问题是,当我处理click事件时,已经填充了集合,因此尚未检索已插入数据库的新项目。

对此可接受的解决方案是什么?

我可以将新对象直接插入到集合中并重新绑定GridView,但SQL查询只选择一组对象,而新对象可能不属于此集。

谢谢!

5 个答案:

答案 0 :(得分:2)

我通常在我的页面中的两个地方进行数据绑定:

  1. 在Page_Load中,如果!IsPostBack加载初始状态。

  2. 作为事件处理程序中最后一行显示添加/编辑/删除记录的结果。

  3. 您遇到的问题只是使用OnPreInit进行数据绑定的结果,因此您可能不得不停止这样做,或尝试其他人建议的次优方法之一(重定向)回发后返回页面。)

答案 1 :(得分:1)

稍后在页面生命周期中执行数据绑定操作,例如在PreRender事件中,在处理完任何控制事件后触发。

答案 2 :(得分:0)

您应该只处理点击事件。然后在数据库更新/插入后,必须重新绑定数据。根据您的实施情况,您可能需要重新发布该页面。如果您使用普通数据绑定,则可以再次调用bind方法。

答案 3 :(得分:0)

  1. 检索Page.LoadComplete事件上的数据并执行数据绑定。
  2. 如果由于某种原因,应该仅在PreInit上检索它们,然后检索它们!IsPostBack条件并绑定它们,对于PostBack条件,在LoadComplete上处理它们

答案 4 :(得分:0)

可以使用此方法来确定哪个控件在PreInit中发布了回发:http://blogs.microsoft.co.il/blogs/gilf/archive/2010/03/01/discover-which-control-raised-a-postback.aspx