Я использую ObjectDataSource с GridView с обработчиком OnObjectCreated в коде. Если я программно изменю значение дочернего элемента управления в GridView, весь элемент управления будет повторно привязан к базе данных в том же запросе (как показано обработчиком OnObjectCreated), что мне не нужно. Это происходит на первой странице запроса GET (так что это не проблема обратной передачи). Вот что показывает трассировка:
aspx.page Begin PreRender
Custom IN handleDSObjectCreated() => tsDao: ETime.DAL.TimeSheetDAO
Custom OUT handleDSObjectCreated()
Custom IN handleDSObjectCreated() => tsDao: ETime.DAL.TimeSheetDAO
Custom OUT handleDSObjectCreated()
aspx.page End PreRender
Есть ли способ предотвратить второй раунд привязки данных, даже если я манипулирую дочерними элементами управления? Ничего на уровне данных не меняется, так что это не нужно. Также обратите внимание, что не задействованы URL-адреса изображений, которые, по-видимому, также вызывают двойное связывание данных. Спасибо.
Обновление:
Я не уверен, помогает ли это или нет, но при просмотре трассировки стека в точке, где вызывается обработчик OnObjectCreated, отображаются следующие различия:
Первый вызов обработчика событий:
System.Web.dll!System.Web.UI.WebControls.GridView.DataBind() + 0x5 bytes
System.Web.dll!System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() + 0x53 bytes
System.Web.dll!System.Web.UI.WebControls.GridView.OnPreRender(System.EventArgs e = {System.EventArgs}) + 0x19 bytes
System.Web.dll!System.Web.UI.Control.PreRenderRecursiveInternal() + 0x57 bytes
Второй вызов обработчика событий:
System.Web.dll!System.Web.UI.WebControls.GridView.DataBind() + 0x5 bytes
System.Web.dll!System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() + 0x53 bytes
System.Web.dll!System.Web.UI.WebControls.CompositeDataBoundControl.CreateChildControls() + 0x46 bytes
System.Web.dll!System.Web.UI.Control.EnsureChildControls() + 0x58 bytes
System.Web.dll!System.Web.UI.Control.PreRenderRecursiveInternal() + 0x33 bytes
Опять же, это все из первоначального запроса GET. Есть идеи, почему его вызывают дважды?