Флажок, не входящий в OnCheckChanged первый раз - PullRequest
0 голосов
/ 05 августа 2010
<ajaxtoolkit:AccordionPane ID="accordianPaneAroundTheCheckbox" runat="server">
    <Content>
        <asp:UpdatePanel ID="updatePanelAroundTheCheckbox" runat="server" >
            <ContentTemplate>
                <div>
                    <asp:CheckBox ID="chkFoo" AutoPostBack="true"  runat="server" OnCheckedChanged="DoBar"/>
                </div>
            </ContentTemplate>
        </asp:UpdatePanel>
    </Content>
</ajaxtoolkit:AccordionPane>

У нас есть что-то подобное выше.Лишний материал был исключен, так как это большая страница.

Я ставлю точку останова в начале Page_Load и DoBar.Первый раз, когда я нажимаю на флажок, точка останова на Page_Load достигнута, а DoBar - нет.Во второй раз, когда я нажимаю на флажок, обе контрольные точки достигнуты.

Почему это могло произойти?Я не генерирую динамически флажок.Его ClientID всегда один и тот же (без динамически генерируемых или идентифицированных контейнеров).Я попытался подписаться на событие в Page_Load, но оно не попадало в первый раз, а просто дважды в последующие.

Обновление Я пытался удалитьUpdatePanel полностью.Мало того, что вся страница постбэк, что я не хочу, но событие все еще не введено.Что может заблокировать / проглотить такой вызов?Есть ли какое-то исключение глубоко в недрах мастер-страницы или вызова фреймворка или чего-то такого, чего я не вижу?

Ответы [ 2 ]

0 голосов
/ 05 августа 2010

Флажок ничего не устанавливается на стороне сервера.Форма заполняется с помощью ajax-вызова к PageMethod, который извлекает пакет данных с сервера и заполняет элементы управления.Проблема в том, что сервер думал, что это не проверено, но javascript проверил это.Когда я снял флажок, произошла обратная передача, и состояние просмотра все еще считало, что его предыдущее состояние было не проверено, а текущее состояние теперь не проверено.Таким образом, событие CheckedChanged не срабатывает.

Тысяча ужасных смертей в Viewstate.Я достаточно близко, чтобы исправить проблему сейчас.Спасибо за попытку / поиск.

0 голосов
/ 05 августа 2010

Это правильный исходный код, который вы вставили? Я спрашиваю, потому что нет события OnCheckChanged, но есть событие OnCheckedChanged. Используя ваш код, он прекрасно работает, когда разметка для флажка выглядит следующим образом:

<asp:CheckBox ID="chkFoo" runat="server" AutoPostBack="true" OnCheckedChanged="DoBar"/>
...