Есть ли способ изменить строки запроса без прерывания обратной передачи ASP.Net? - PullRequest
1 голос
/ 09 декабря 2008

Читая здесь и вокруг сети, я близок к предположению, что ответ "нет", но ...

Допустим, у меня есть страница ASP.Net, которая иногда имеет параметр строки запроса. Если на странице есть параметр строки запроса, я хочу удалить его до, во время или после обратной передачи. На странице уже много клиентских скриптов (чистый JavaScript и jQuery).

В качестве примера, скажем, я загружаю:

http://myPage.aspx?QS=ABC

Параметр QS необходим для управления тем, что появляется на странице при первой загрузке, и задается страницей, которая его «вызывает». myPage.aspx имеет элементы формы, которые необходимо заполнить, и кнопку отправки, которая выполняет обратную передачу. Когда страница завершает обратную передачу, мне нужно вернуть URL-адрес:

http://myPage.aspx

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

Какие-нибудь идеи или лучшие практики?

PS. Могу ли я что-нибудь сделать со свойством Form.Action, которое не нарушит поведение обратной передачи?

Ответы [ 3 ]

2 голосов
/ 09 декабря 2008

Я бы использовал HTTPModule для перехвата и перезаписи URL и запроса по мере его поступления. Я не на 100%, но я не верю, что это имеет какое-либо влияние с viewstate.

Звучит (и выглядит) сложным, но на самом деле это довольно тривиально и открыто для тонкой доработки и расширения (в соответствии с .NET в целом).

1 голос
/ 09 декабря 2008

Я не уверен, что это то, что вы ищете, но если вы правильно поняли, вы могли бы сделать это:

- при проверке загрузки страницы для значения QS, если его там нет, используйте скрытое поле ввода.

- первая страница времени загружается с помощью QS, выполняйте обычную обработку и сохраняйте значение QS в скрытом поле ввода.

- если нет QS, тогда использовать скрытое значение ввода

- после обратной передачи вы можете перенаправить на ту же страницу, в этот момент вы можете использовать Request.Form [], чтобы получить скрытое поле ввода, по-прежнему загружать данные правильно, но избавиться от QS.

это имело смысл в моей голове, я не уверен, что это имеет смысл сейчас, но я позволю тебе решить.

1 голос
/ 09 декабря 2008

Вероятно, это плохая практика, но в этих случаях (и мне просто нужно «перезагрузить» страницу) я просто делаю Response.Redirect на ту же страницу.

...