По проекту необходимо было написать WebControl – 2 кнопки а между ними контет. При нажатии по кнопкам происходит перелистывание контента. Все должно было работать под Ajax. В общем все как обычно, вроде ничего сложного:
public class VQueueView : CompositeDataBoundControl, ICallbackEventHandler, IPostBackEventHandler
{
// Здесь код… все как обычно
}
Контрол вроде бы работает нормально, как и нужно. Но вот вчера решил посмотреть под firebug-ом как он работает: просмотреть заголовок post и ответ сервера. И вот здесь натолкнулся на такую вот х… А именно:
В post вроде бы все как и нужно — __VIEWSTATE, __CALLBACKID, __CALLBACKPARAM, __EVENTVALIDATION и т.д
А вот в ответе вот такая херня:
496|/wEWOgLWgp6FBgLXr/yDCALar/yDCALZr/yDCALcr/yDCALbr/yDCALer/yDCALdr/yDCALgr/yDCALfr/yDCALXr7yDCALXr7iDCALXr8SDCALXr8CDCALXr8yDCALXr8iDCALXr9SDCALXr9CDCALXr9yDCALXr9iDCALar7yDCALar7iDCALar8SDCALar8CDCALar8yDCALar8iDCALar9SDCALar9CDCALar9yDCALar9iDCALZr7yDCAKj0L3MAQLFx/DLDgL0i5cMAtmi/fYFAojno7cHAo/1uKEKAubv8LcKAo/1sKEKAtmijfcFAoHZns0EArK+oNAHAtaJz/8LAqb2vc8EAqLV6NAKArGK45cBAqjqg4ELAqjqh5kJAvvkssYKAsaY4acKAvXitYYPAuHDx68NAs6x/LEHAqnLt5oOAtyygc8HAtyymc8HAtyygc8HAtyymc8H+YUkLDloLEjGZyD+1SCdipyUfBI=
и только потом разметка контента.
Откуда берутся эти иероглифы и как с ними бороться? !!!
Самое ужасное, что при каждом последующем нажатии по кнопке ответ растет, т.е таких иероглифов становиться больше (примерно на 0.1 Кбайт за запрос).
P.S Просмотрел внимательно что в таких случаях возвращает UpdatePanel. Там вроде бы ответ не растет, вот только всякой бороды типа ViewStat-а назад передается.
Самое интересное обнаружил потом: допустим кликаю по кнопке этого контрола раз так 20. Ответ увеличивается на 2 Кбайта по сравнению с первым ответом. Потом кликаю по другой кнопке на странице, которая является триггером для UpdatePanel-и (абсолютно левой не связанной с моим контролом). И о чудо!!! Кликаю снова по кнопке моего конрола и смотрю что размер ответа такой же как при первом нажатии (т.е обновление UpdatePanel че то там такое интересное сделала). Копался в коде js, обнулял там всякие __theFormPostData, смотрел цепочку вызовов после WebForm_DoCallback но путного ничего так и не нашел.