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

3
我有一个数据访问层,业务逻辑层和表示层(即页面本身)。
我处理OnPreInit事件并填充页面所需的集合。所有数据来自SQL服务器数据库,我不使用缓存。
我处理按钮单击事件以从表单中获取值并将新对象插入数据库。问题是,在我处理单击事件时,集合已经被填充,因此尚未检索到已插入数据库的新项目。
这个问题的解决方案是什么?
我可以直接将新对象插入集合并重新绑定GridView,但SQL查询仅选择一组对象,并且新对象可能落在该组之外。
谢谢!
5个回答

2
我通常在页面的两个地方进行数据绑定:
1. 在 Page_Load 中,如果 !IsPostBack,则加载初始状态。 2. 作为事件处理程序中最后一行之一,以显示添加/编辑/删除记录的结果。
你遇到的问题只是使用 OnPreInit 进行数据绑定的结果,所以你可能需要停止这样做,或尝试其他人提出的次优方法(在 postback 后重定向回页面)。

Cory的解释是最完整的。关键在于,除非由于用户操作(例如添加新项目)明确需要,否则不要在PostBack时重新绑定数据。查看Microsoft的任何数据绑定示例,例如GridView。 - Bryan
太好了,加上pmarflee的提示,我解决了这个问题。谢谢! - Phillykins

1
在页面生命周期的后期执行数据绑定操作,例如在页面 PreRender 事件中执行,该事件会在处理任何控件事件之后触发。

0
你只需要处理点击事件。在数据库更新/插入之后,必须重新绑定数据。根据你的实现方式,你可能需要重新提交页面。如果你使用普通数据绑定,只需再次调用绑定方法即可。

如果可能的话,我想避免在这种情况下再次往返于数据库和Web服务器之间,因为这似乎是不必要的。 - Phillykins
如果业务逻辑在数据库中,你必须询问数据库该怎么做。你可以从插入语句中返回一些值告诉你该怎么做,但这似乎有些不正规。 - Greg

0
  1. 在 Page.LoadComplete 事件中检索数据并进行数据绑定。
  2. 如果出于某种原因,应仅在 PreInit 上检索它们,则在 !IsPostBack 条件下检索它们并绑定它们,并在 PostBack 条件下在 LoadComplete 上处理它们。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接