Возможно ли, что __doPostBack() когда-нибудь отправит запрос GET?
-
20-09-2019 - |
Вопрос
У меня возникла проблема с 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.