Повторите пользовательский контроль и Viewstate - PullRequest
1 голос
/ 12 февраля 2011

Я поддерживаю приложение ASP.NET Web Forms на платформе 3.5.По сути, это список элементов и флажок для обозначения состояния элемента.Пользователи могут сортировать элементы по любому из нескольких столбцов.Новые элементы добавляются и удаляются между постбэками.Этот список размещен в Repeater, а шаблон элемента является пользовательским контролем.Страница не имеет главной страницы, так как это приложение, которое было обновлено с фреймворка 1.0 с 1.1 до 2.0 до 3.5.Приложение делает это, если оно размещено на IIS6.1 и 7.5, 32-разрядной и 64-разрядной версиях.Он находится в собственном пуле приложений, и в пуле 4 потока.

Теперь проблема: если в третьей строке установлен флажок и элемент в позиции 1 удален в базе данных, то он должен двигаться вверхв положение 2. Он перемещается вверх, но отмеченный флажок остается в положении 3. Если строки отсортированы, то все отмеченные флажки остаются на своих местах, но остальная информация сортируется и отображается правильно, включая заголовокдля родительского тега.

Viewstate отключен на пользовательском элементе управления и на флажке в пользовательском элементе управления.Кэширование страницы отключено в директиве страницы.Повторитель привязан к загрузке страницы.Я проверил состояние элементов управления в повторителе, которые должны быть проверены сразу после повторителя. DataBind и состояние флажков правильные.Это последняя строка в событии загрузки страницы.Используя fiddler, я убедился, что отображаемый HTML-код неверен.Так что, похоже, проблема где-то в рендере.

Насколько я смог это сделать.Приложение критически важно, но эта ошибка существует очень давно.Очевидно, что состояние этого флажка было не таким важным, но из-за меняющихся бизнес-требований оно становится проблемой.

Поиск не приводит к ошибкам.Я могу опубликовать код, но это очень долго, так как он является частью большого приложения, поэтому я не сделал.

Похоже, что viewstate загружается между Page_Load и LoadComplete.Проверка значений после привязки данных и LoadComplete показывает это.Что может привести к загрузке viewstate в неподходящее время, как это.По ощущениям как ошибка.Это влияет только на одну страницу в приложении.Я знаю, что viewstate заполняется после init и что все элементы управления должны быть загружены во время OnInit, но я не хочу viewstate, поэтому вполне нормально, что это не работает.

Это не имеет ничего общего с типом управления.Я только что обменял флажок asp: на htmlinputcheckbox, и поведение сохранилось.

РЕДАКТИРОВАТЬ: Будет ли государство контроля иметь какое-либо отношение к этому?Насколько я знаю, его нельзя отключить.

1 Ответ

0 голосов
/ 16 февраля 2011

После снятия флажка asp: для HtmlInputCheckBox и возникновения такой же проблемы. Я определил, что проблема, в частности, с флажком, и обменял его на asp: ImageButton с поддельным изображением флажка.

Мне кажется, хотя я точно не знаю, что состояние флажка является частью состояния контроля, а не состояния просмотра. Для меня это похоже на ошибку Microsoft, но, возможно, именно так был разработан этот элемент управления.

...