У меня есть запрос страницы с 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.