Недопустимый аргумент обратной передачи или обратного вызова — серверные элементы управления отсутствуют, кроме кнопки (модуль DNN).

Моя страница модуля DNN содержит только несколько div и LinkButton. Содержимое div заполняется с помощью jQuery AJAX. Кнопка используется для отправки файла на сервер, который необходимо загрузить. Я получаю сообщение об ошибке «Неверный аргумент обратной передачи или обратного вызова».

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

<div id="divTop"></div>
<div id="divMain"></div>
<div id="divError" style="display: none" class="ui-widget-content ui-state-error"></div>
<div id="divAddFile"></div>
<div id="divSearchNow" class="ui-widget-header divControl" style="position: absolute; display: none; z-index: 999;"></div>
<asp:LinkButton ID="btnUploadFiles" runat="server" OnClick="btnUploadFiles_Click"
Style="display: none;">Upload Files</asp:LinkButton>

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

В большинстве примеров, которые я видел до сих пор, упоминаются выпадающие списки, которыми управляют с помощью javascript, и, следовательно, RegisterForEventValidation используется для всех динамических значений. Как я могу применить это к моей ситуации?

Я также открыт для предложений по подходу, который я использую для загрузки файлов на страницу, которая почти полностью отображается через AJAX. Заранее спасибо!


person Apeksha    schedule 20.12.2013    source источник
comment
Я бы попытался поместить кнопку ссылки в UpdatePanel: у меня были похожие проблемы, и я решил их таким образом.   -  person Trapias    schedule 15.10.2014


Ответы (1)


Ваша главная проблема здесь заключается в том, что вы не можете использовать Postbacks и AJAX одновременно без большого количества проблем. Когда сервер выдает веб-страницу, он ожидает, что тот же контент будет возвращен при постбэке. Например, если он отправляет пустые div, то вы заполняете их с помощью AJAX, а затем отправляете обратно на сервер, сервер выдает ошибку. Есть несколько способов обойти это, но, по моему опыту, они почти никогда не работают последовательно.

Вам нужно сделать приложение либо полностью сервисно-ориентированным (AJAX), либо полностью основанным на методе страницы.

Сервис-ориентированный — создайте элемент управления на стороне сервера, который позволит вам использовать функции AJAX для загрузки файла.

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

Использование панелей обновлений будет работать, если контент в div не нужен при загрузке. Другими словами, если вам нужно отправить обратно элементы div при нажатии кнопки, вы все равно получите ту же ошибку. Если содержимое div не требуется, то обертывание панели обновления только вокруг кнопки приведет к тому, что будет отправлено только нажатие этой кнопки, и это может устранить вашу ошибку.

person Steven A West    schedule 18.08.2015