仅在PostBack失败时才支持DataBind

时间:2015-03-18 10:12:22

标签: asp.net postback

我的代码中有很多地方,如下所示:

protected void Page_Init(object sender, EventArgs e)
{
    DataBindAllRepeaters(); // heavy (up to 1 min).
}

protected void Click(object sender, EventArgs e)
{
    if (DoSomething(... user input .....))
        Response.Redirect("Success.aspx");

    ShowError();
}

您可能会注意到,如果Repeater成功,DoSomething(...)的数据不会在回发中使用,但每次点击都需要花费1分钟将其加载到Page_Init中。是否有任何优雅的技术可以避免这种情况?

当然,我知道IsPostBack,但是我必须多次致电DataBindAllRepeaters():在Page_Init和每个点击处理程序的末尾?

1 个答案:

答案 0 :(得分:0)

如果需要一分钟来对您的转发器进行数据绑定,则会显示太多数据。无论如何,您应该尝试优化您的查询。但是,由于这些值默认存储在ViewState中,因此您不需要在每次回发时对它们进行数据绑定。

因此请使用IsPostBack属性进行检查:

protected void Page_Init(object sender, EventArgs e)
{
    if(!IsPostBack)
        DataBindAllRepeaters(); // heavy (up to 1 min).
}
  

当然,我知道IsPostBack,但我必须打电话   DataBindAllRepeaters()多次:在Page_Init和结尾处   每个点击处理程序?

不,您不需要在事件处理程序中对数据绑定进行数据绑定。您不应该依赖事件中的数据源。如果您必须识别记录,则只需要它可以以各种方式存储的主键值。