Обновление viewstate из ответа обратной передачи - PullRequest
1 голос
/ 25 января 2012

У меня есть сайт ASP.NET. В какой-то момент инициируется обратная передача, и некоторые данные изменяются на сервере, и отправляется ответ (с новым состоянием просмотра). Проблема в том, что я использую jQuery, чтобы показать только часть этого ответа на странице. Это работает, но у меня проблемы с обновлением состояния просмотра с новым значением. У меня есть что-то вроде этого:

var updatePreviewArea = function (nid) {
    var $content = jQuery('<div></div>');
    $content.load('http://site.com?nid=' + nid, function (response) {
        var $response = jQuery(response);

        jQuery('targetDiv1').replaceWith($response.find('#srcDiv1'));
        jQuery('targetDiv2').replaceWith($response.find('#srcDiv2'));

        // update viewstate from postback response
        var selectors = ['#__VIEWSTATE', '#__EVENTVALIDATION'];
        for (var i in selectors) {
            var value = $response.find(selectors[i]).val();
            jQuery(selectors[i]).val(value);
        }
    });
}

Но после этого я получаю:

Sys.WebForms.PageRequestManagerServerErrorException: Sys.WebForms.PageRequestManagerServerErrorException: проверка MAC представления состояния не удался. Если это приложение размещено на веб-ферме или кластера, убедитесь, что в конфигурации указаны те же validationKey и алгоритм проверки. Автогенерация не может быть использована в кластер. при вызове метода: [nsIDOMEventListener :: handleEvent]

Ответы [ 3 ]

3 голосов
/ 25 января 2012

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

Поскольку вы используете jQuery и AJAX для динамического получения контента с вашего сервера, я не уверен, почему вы зависите от ViewState (но я не знаком с вашим приложением).

2 голосов
/ 25 января 2012

Я бы не пошел по этому пути (обновляя ViewState вручную), так как это не простая задача; по крайней мере, ViewState - это строка в кодировке BASE64, и вам придется написать довольно много кода javascript, чтобы всегда поддерживать синхронизацию. Я вижу, что это становится кошмаром для поддержания. На вашем месте, я бы использовал строго ajax, вместо того, чтобы разрешать подобные посты, или позволял MS обрабатывать ViewState для вас, и использовать UpdatePanels, но я тоже не люблю их.

Кроме того, если вашему приложению по какой-либо причине потребуется шифрование ViewState, вам не будет весело поддерживать ваше приложение.

1 голос
/ 25 января 2012

Закодированное __VIEWSTATE относится к странице, которая его сгенерировала.Вы получите ошибку проверки состояния представления, если страница, на которой публикуется ваша форма, не соответствует странице, которая сгенерировала состояние представления.У вас есть два варианта:

  1. Отправьте запрос AJAX на ту же страницу * , а не на другую страницу.
  2. Установите URL-адрес публикации формы в URLдругой страницы.
...