Перенаправить с URL с QueryString на тот же URL без QueryString - PullRequest
2 голосов
/ 19 марта 2010

У меня есть запрос страницы с QueryString, скажем http://www.xyz.net/Orders.aspx?OrderID=1. Страница отображается в браузере. Теперь на странице есть asp:LinkButton, который должен позволить пользователю открывать страницу без QueryString (как если бы он ввел http://www.xyz.net/Orders.aspx непосредственно в адресную строку браузера).

У меня было две идеи:

1) Используйте атрибут PostBackUrl LinkButton:

<asp:LinkButton ID="LinkButton1" runat="server" Text="Select"
    PostBackUrl="~/Orders.aspx" />

2) Использовать «RedirectUrl» в обработчике событий:

<asp:LinkButton ID="LinkButton1" runat="server" Text="Select"
    OnClick="LinkButton1_Click" />

... и ...

protected void LinkButton1_Click(object sender, EventArgs e)
{
    Response.Redirect("~/Orders.aspx");
}

В обоих случаях в адресной строке браузера отображается http://www.xyz.net/Orders.aspx без QueryString, как мне нравится. Но в первом случае страница вообще не меняется. Но так и должно быть, потому что я оцениваю QueryString в выделенном коде и контролирую внешний вид страницы в зависимости от того, существует QueryString или нет. Второй вариант работает как задумано.

Если я не ошибаюсь, второй вариант требует дополнительной поездки туда и обратно:

  • Браузер отправляет запрос на сервер
  • Обработчик событий на стороне сервера отправляет URL-адрес перенаправления в браузер
  • Браузер снова отправляет запрос на сервер, но с новым URL
  • Сервер отправляет новую запрошенную страницу в браузер

Правильно ли это вообще?

В то время как первый вариант пропускает первые два шага в приведенном выше списке, тем самым сохраняя дополнительный туда-обратно и в результате:

  • Браузер отправляет запрос на сервер, но с новым URL (PostbackURL, указанный в LinkButton)
  • Сервер отправляет новую запрошенную страницу в браузер

Но, как уже было сказано, результат не тот.

Я уверен, что моя попытка объяснить разницу между этими двумя вариантами где-то не так. Но я не знаю, где именно.

Может кто-нибудь объяснить, в чем действительно разница? Неужели мне действительно нужен второй обход варианта (2) для достижения того, чего я хочу?

Заранее спасибо!

Обновление и решение

Автор вопроса (я) доказал этим вопросом, что он не понимает разницы между HTTP POST и GET. Для решения см. Мой комментарий в ответе egrunin.

1 Ответ

2 голосов
/ 19 марта 2010

Если вы не хотите подключаться к серверу, почему бы не использовать простой элемент управления HTML:

function stripQuerystring()
{
    return window.location.protocol + "//" 
        + window.location.host + window.location.pathname;
}

<input type="button" 
    onclick="javascript:window.location = stripQuerystring();" 
    value="Click Me">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...