我的代码中有很多地方,如下所示:
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
和每个点击处理程序的末尾?
答案 0 :(得分:0)
如果需要一分钟来对您的转发器进行数据绑定,则会显示太多数据。无论如何,您应该尝试优化您的查询。但是,由于这些值默认存储在ViewState
中,因此您不需要在每次回发时对它们进行数据绑定。
因此请使用IsPostBack
属性进行检查:
protected void Page_Init(object sender, EventArgs e)
{
if(!IsPostBack)
DataBindAllRepeaters(); // heavy (up to 1 min).
}
当然,我知道IsPostBack,但我必须打电话 DataBindAllRepeaters()多次:在Page_Init和结尾处 每个点击处理程序?
不,您不需要在事件处理程序中对数据绑定进行数据绑定。您不应该依赖事件中的数据源。如果您必须识别记录,则只需要它可以以各种方式存储的主键值。