Понимание порядка событий в WebForms может быть наиболее полезным для такого рода вещей.Например, Page и Control могут быть заменены именами событий.Порядок событий следующий:
- Page_Init (...) (данные ViewState недоступны)
- Page_Load (...) (ViewState доступен)
- Управляющие события (например, Click, RowSelect и т. Д.)
- PreRender (...)
Если вы не привязываете сетку после постбэка (лучше всеговызовите DataBind () в PreRender после завершения всей логики вашей страницы), и для EnableViewState
не будет задано значение true, тогда вы потеряете эту информацию, размещенную в сетке, и не сможете получить к ней доступ при обратной передаче.ViewState назначается между Init и Load и позволяет вам получить доступ к свойствам элементов управления.Если вы звоните DataBind()
в Page_Load
, то ваши контрольные события могут дать непредсказуемые результаты, так как базовые данные могут отличаться.
Другими словами, если вы хотите использовать GridView, как вы его определили, EnableViewState, по крайней мере для GridView, должно быть истинным.Тогда вам не следует повторно связывать его во время обратной передачи
void Page_PreRender(object sender, EventArgs e)
{
if (!Page.IsPostback)
{
DataBind();
}
}
, и это состояние должно эффективно сохраняться.Кроме того, не изменяйте значение вашего свойства AutoPostBack
.