Возможно ли, что __doPostBack() когда-нибудь отправит запрос GET?

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

Вопрос

У меня возникла проблема с telerik RadGrid, я хочу включить выбор нескольких строк.Я также хочу переходить на сервер всякий раз, когда строка выбрана или отменена.Я создал функцию javascript для обработки событий на стороне клиента Grid (OnRowSelected и OnRowDeSelected).Функции выглядят следующим образом:

 function onOperationRowSelected(sender, eventArgs) {
            __doPostBack("<%=myControl.ClientID %>", "rowSelected:" + eventArgs.get_itemIndexHierarchical());
        }

Другая функция очень похожа, единственное отличие заключается в том, что она отправляет строку "rowDeselcted" вместо "rowSelected".

На Page_Load я проверяю, является ли запрос Post запросом, используя "IsPostBack", и если да, я проверяю, является ли это rowSelected или rowdeselected .

Моя проблема в том, что когда я выбираю первый raw в своей сетке, происходит запрос Post (что и ожидалось), однако, когда я выбираю вторую строку, выдается запрос GET, что (очевидно) приведет к тому, что IsPostBack вернет false .

Чего я здесь не понимаю?


Редактировать: Я только что проверил объект запроса и обнаружил, что значением свойства HttpMethod является "POST".Почему это HTTP POST-запрос, а IsPostBack возвращает false??

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

Решение

Вы уверены, что запрос GET содержит правильный аргумент event?
Я думаю, что есть что-то еще, что делает запрос GET.Вероятно, какая-то магия AJAX с помощью этой сетки, какой-то ресурс или вызов AJAX PageMethod или перезапись URL-адреса или что-то в этом роде.

Является ли имя страницы default.aspx или что-то подобное?Иногда в каком-либо браузере (не могу вспомнить детали) при получении изображения или около того (не могу вспомнить точную ситуацию) браузер также попадает на URL "samefolder /", который открывает страницу по умолчанию.

Проверьте запрос с помощью FireBug и посмотрите, что он сообщает.

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

Функция уважает действие <form>.Вот что делает __doPostBack:

function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}

Таким образом, он будет делать все, на что настроена форма, это просто обычно post в asp.net.

Так возможно ли это?Да, абсолютно, почему это происходит в вашем случае, я не уверен.

Не видя разметки, которую генерирует сетка, я предполагаю, что для выполнения обратной передачи она использует ссылку с обработчиком кликов, применяемым javascript.Таким образом, я думаю, что наиболее вероятным виновником является ошибка javascript, которая препятствует запуску обработчика, что дает вам поведение якоря по умолчанию, к которому применяется обработчик, в данном случае GET .Лучший совет, который я могу вам дать, - посмотреть на это в Firefox / Firebug и посмотреть, есть ли какие-либо ошибки, отображаемые в консоли.

Тем не менее, вы можете захотеть создать приложение так, чтобы оно работало, если javascript отключен, и исправить ошибку, и выяснить, как реагировать, если в итоге вы получите запрос GET.

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