2015-03-18 5 views
0

У меня есть много мест в моем коде, которые выглядят как:DataBind если 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 и в конце каждого обработчика кликов?

ответ

0

Если на ретранслятор требуется одна минута, вы показываете слишком много данных. В любом случае вам следует попытаться оптимизировать свои запросы. Однако, поскольку значения хранятся в ViewState по умолчанию, вам не нужно привязывать их к каждой обратной передаче.

Поэтому использовать IsPostBack свойство, чтобы проверить его:

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

Конечно, я знаю о IsPostBack, но тогда я должен назвать DataBindAllRepeaters() много раз: на Page_Init и в конце каждый обработчик кликов?

Нет, вам не нужно связывать данные в обработчике событий. Вы не должны зависеть от источника данных в событиях. Если вам нужно идентифицировать запись, вам просто нужно ее первичное значение, которое можно сохранить различными способами.

+0

Это страница статистики в моей панели администратора. Он рассчитан «на лету». Я отключил ViewState для всего моего сайта давным-давно - у меня есть вложенный 'Repeater' с 'DropDownList' и т. Д., И он создает гигантскую строку base64. Поэтому я привязываю данные к каждой перезагрузке страницы. – Denis

+0

@Denis: вы видите, что отключить viewstate не означает, что вы получаете лучшую производительность. Тем не менее, он по-прежнему не объясняет, почему вы считаете, что вам нужно «вызывать DataBindAllRepeaters() много раз: на странице_Инте и в конце каждого обработчика кликов». –

Смежные вопросы