为什么以及何时在asp.net中覆盖和使用OnPreRender

rum*_*umi 3 c# asp.net

我正在处理由另一个开发人员编写的代码,如下所示

  protected override void OnPreRender(EventArgs e)
    {
        PopulateGrid();

        base.OnPreRender(e);
    }
Run Code Online (Sandbox Code Playgroud)

PopulateGrid();检查postback属性后,我会在Page_Load事件中调用 方法.在这里调用这个方法我们有什么好处overriden OnPreRender.是否有必要致电base.OnPreRender(e):?

Mic*_*Liu 10

我们在这个被覆盖的内部调用这个方法有什么好处OnPreRender吗?

回发事件引发后,会发生预渲染阶段(例如button_Click),所以通过调用PopulateGridOnPreRender,可以考虑到被点击的按钮.如果按钮修改数据源,这将非常有用.

是否有必要打电话base.OnPreRender(e)

严格地说,如果你从派生Control,WebControl,UserControl,或Page,然后调用base.OnPreRender只是引发PreRender事件,所以它不是必要调用它,除非有人迷上了针对该事件的处理程序.如果你是从其他东西派生的,那么你需要检查基类是否做了额外的事情OnPreRender.

但我建议您始终调用基本方法,以防PreRender将来某些其他组件需要处理该事件.

  • @Dev:假设您的页面上有一个`deleteButton`从数据库表中删除一行,而`PopulateGrid`从表中检索数据并将其绑定到网格。通过在OnPreRender中调用`PopulateGrid`,网格将反映按钮所做的删除,因为在`deleteButton_Click`之后调用了`OnPreRender`。在`Page_Load`或`OnLoad`中调用`PopulateGrid`可能为时过早,因为这发生在* deleteButton_Click之前*。 (2认同)