Пользовательский шаблонный элемент управления asp.net/ajax, показ/скрытие элементов с помощью заполнителя

StackOverflow https://stackoverflow.com/questions/1706705

Вопрос

У меня есть собственный шаблонный элемент управления (панель инструментов), который содержит настраиваемый пользовательский элемент управления (кнопку). Кнопка использует jquery для стилизации и управления состояниями/обратными передачами/не=обратными передачами и т. д.

Некоторые кнопки скрыты заполнителем и отображаются при нажатии одной из кнопок.

Кажется, что все кнопки, относящиеся к jquery, инициируются при обратной передаче (стиль ajax внутри UpdatePanel с использованием PageRequestManager), однако состояние просмотра теряется на кнопках, которые становятся невидимыми из-за заполнителя.

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

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

Код находится в разных частях и, вероятно, его не стоит вставлять, так как он будет полностью отключен (я знаю, что это не помогает)

Это было полезно?

Решение

Я чувствую, что мне нужно ответить на свой вопрос здесь:

Вместо использования PlaceHolders или div с css, UpdatePanels отображаются либо в div, либо в интервале, в зависимости от варианта рендеринга.В этом случае просто скройте элемент управления или диапазон, созданный UpdatePanel, вместо того, чтобы пытаться скрыть/показать новый внешний контейнер.

Другие советы

Если я правильно помню, элементы управления ASP.NET не завершают свой жизненный цикл, если для параметра видимости установлено значение false.Это означает, что такие вещи, как Render(), не вызываются, и ViewState должна быть одной из таких вещей (что имеет смысл).Использование панелей обновления вместе с AJAX/Javascript также является очень сложной задачей и работает не очень хорошо.Именно так работают элементы управления ASP.NET и панель обновления.

Я предлагаю либо использовать панели обновления, либо использовать JavaScript, но не то и другое.

Вы можете легко имитировать работу панелей обновления, используя $.post/get jquery и заменяя часть кода HTML-кодом, возвращенным из вызова веб-службы.

function myButtonClick(event){
    $.post("path/to/webservice", {data1: "data1"}, function(data, status){
        $("#myPanel").replaceWith(data);
    });
}

В конечном итоге вы столкнетесь и с другими проблемами, если у вас есть JS, прикрепленный к коду, который обновляется через панель обновлений.Бывший:Если у вас есть список элементов, к каждому из которых прикреплен JS, например один из элементов управления ASP.NET AJAX Control Toolkit, и вы удаляете один из них со страницы с помощью панели обновления, JS используется для подключения элементов управления. будет рассинхронизировано.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top