2009-12-23 2 views
1

У меня есть настраиваемый элемент управления, в котором есть элемент управления RadioButtonList. При выборе одного из переключателей управление выполняет обратную передачу, чтобы выполнить некоторую работу с серверами, и страница перезагружается с правильным выбранным радиобарабаном. Это отлично работает на моей тестовой странице.asp.net 2.0 пользовательский контроль состояние состояния проблема

Теперь я переместил элемент управления на страницу, на которой он будет жить, и когда будет выбран радиобъектив, происходит обратная передача, но когда страница перезагружает радиокамеру, она больше не будет выбрана. Таким образом, кажется, что выбор больше не сохраняется в viewstate.

Любые указания относительно того, какие аспекты новой страницы я должен смотреть, были бы очень благодарны.

Приветствия

Adendum - немного подробнее

Спасибо за совет Стивен

Контроль был первоначально разработан в качестве контроля веб-пользователя с помощью конструктора, очень простую реализацию, на стороне сервера обработчики для onload и когда изменяется радиобъект. Отдельная dll для кода позади и ascx. Затем я преобразовал его в пользовательский элемент управления, чтобы вытащить ascx в DLL с помощью скомпилированного кода.

Я не динамически создаю элемент управления на тестовой странице, есть тег и <% @ Зарегистрируйтесь ... blah blah> наверху в aspx, чтобы сделать это. Список радиообмена был перетаскиван и вставлен в ascx с помощью конструктора, поэтому я не реализовал код для его создания. Так что все очень ваниль. Я действительно ищу различия, которые я должен искать на страницах, которые используют элемент управления, чтобы понять, почему он работает на тестовой странице, но не на странице сайта, в которой он должен находиться.

* ********** Дополнение *********** У меня было короткое время, чтобы решить эту проблему и пришлось передать ее другому разработчику. Когда я узнаю от него, что такое решение, я отправлю его здесь. Большое спасибо всем за их вклад.

*********** Ответ ************* Вот ответ от разработчика, который взял на себя ответственность.

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

+0

Использует ли страница AJAX? – SLaks

+0

Нет, это простая страница asp.net. – Rich

+0

@SLaks, если на странице используется Ajax, что я должен искать? Я знаю, что я сказал, что это не так, но мне любопытно, что рано или поздно мне придется снова заниматься аяксом. – Rich

ответ

0

Получил ответ от разработчика, который взял на себя проект ->

«Ваш контроль Теста был прекрасным помощником, причина, по которой значение не было сохранено на постбэк был из-за унаследованную функциональность в базовом классе, когда вы поместили его в живую. По сути, он использовал DataBind в методе загрузки страницы, который в жизненном цикле страницы перед вызовом метода postback, поэтому он меняет значения выпадающих списков. В конце концов я настроил некоторые свойства viewstate, которые содержали значения из выпадающих списков. Значит, это было не то, о чем вы могли бы знать ».

Надеюсь, это поможет кому-то.

2

Убедитесь, что страница имеет

EnableViewState=True 
+0

Да, состояние просмотра включено. – Rich

0

Последний раз я нуждался в ViewState для радио кнопки, я должен был отменить LoadViewState и SaveViewState методы, чтобы заставить его работать правильно.

2

Во-первых, это НЕ проблема ViewState. Viewstate предназначен для программных изменений элементов управления на странице. Если вы установите для текста метки значение, отличное от того, что находится в ASPX в CODE BEHIND, это значение сохраняется в viewstate. У .NET есть механизм (и он контролируется через интерфейс, который должен выполнить ваш контроль), который анализирует данные POST обратно на элементы управления, где он принадлежит, который возникает после загрузки ViewState, но до того, как произойдет событие Page_Load.

Теперь, есть несколько различных возможностей для причин этого:

Во-первых, это радиокнопку внутри пользовательского элемента управления генерируется внутри метода CreateControls или это прямой HTML, что ваш контроль рендеринга? Если это прямой HTML, вам нужно убедиться, что вы обрабатываете ожидаемые значения по мере их возврата из обратной передачи. Если это элемент управления сервером, объявленный как NEW внутри вашего настраиваемого элемента управления, а не созданный и обработанный в методе CreateControls, тогда вам нужно его mvooe.

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

+0

I Stephen, я добавил и добавлю к оригинальному вопросу, который заполняет некоторые из вопросов, которые вы задали, и немного больше. Cheers – Rich

+0

+1 для указания того, что ViewState не используется для сохранения состояния элемента управления через обратную передачу. Для этого используется ControlState. – Rich

+0

Stephen/Rich, действительно ли это состояние контроля? Разве эти стандартные данные не отправляются обратно в запрос POST? Контролирует ли управление radioobutton состояние управления в asp.net 2.0 для хранения состояния, а не asp.net 1.1? – Preets

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