事件处理后如何更新页面数据?

Joa*_*son 3 asp.net page-lifecycle event-handling

在Page_Init上,我创建了一个基于几个数据库表的动态创建控件的表.其中一个控件是ImageButton,用于将列表项向上移动.此事件处理程序执行的操作是更新受影响项目的数据库中的SortOrder列.

现在的问题是,由于控件是在Page_Init事件中创建的,因此稍后在触发ImageButton命令事件时更新SortOrder.使用正确的SortOrder更新表的最佳步骤是什么.如果在事件触发后重新创建表,则ImageButton命令事件不再起作用.

  • 我应该实现一种方法来更新表中的数据而不重新创建它吗?
  • 事件发生后我应该在代码中重新加载页面吗?

您解决此问题的首选方法是什么?

Cer*_*rus 8

页面事件,例如InitLoad将始终在引发回发的事件处理程序之前触发.这是页面生命周期的基础(有关Peter Bromberg的可视化表示,请参见此处).大多数ASP.NET新手都有一个重要的问题是理解和妥善处理这个"窘境".

这样做的理想方法是:

一个.您Page_Init应该调用一个过程(让我们称之为BindData()插图)来处理基于数据库数据创建表的过程.此方法类似于绑定到数据库数据并基于该绑定呈现UI元素的绑定方法.IOW,您应该从Page_Init方法中删除表创建代码并将其放在一个单独的方法中,以便在需要时可以调用它.

重要说明:BindData()方法还处理将动态创建的ImageButton控件的eventhandler附加到控件.我们称之为ImageButton_Click.这对于在后续回发时触发事件的控制至关重要.

湾 当您的ImageButton_Click方法执行时,它会调用BindData()方法来重新创建表,并使用新的排序顺序重新绑定表.

因此,第一次加载的执行顺序是:

  1. Page_Init
  2. BindData()

后续加载(回发时)的执行顺序是:

  1. Page_Init
  2. BindData() - 附加了ImageButton的Eventhandler.
  3. ImageButton_Click
  4. BindData()