asp.net/ajax настраиваемый элемент управления, показывающий / скрывающий элементы с заполнителями - PullRequest
0 голосов
/ 10 ноября 2009

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

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 27 ноября 2009

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

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

0 голосов
/ 10 ноября 2009

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

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

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

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

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

...