У меня есть запрос страницы с QueryString, скажем http://www.xyz.net/Orders.aspx?OrderID=1
. Страница отображается в браузере. Теперь на странице есть asp:LinkButton
, который должен позволить пользователю открывать страницу без QueryString (как если бы он ввел http://www.xyz.net/Orders.aspx
прямо в адресной строке браузера).Перенаправление с URL с QueryString на тот же URL без QueryString
У меня было две идеи:
1) Используйте атрибут LinkButton PostBackUrl
:
<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) для достижения того, чего я хочу?
Заранее благодарен!
Update и решение
Автор вопроса (я) доказал этот вопрос, что он не понимает разницу между HTTP POST и GET. Для решения см. Мой комментарий в ответе egrunin.
Спасибо, это работает! Но почему? И почему не первый вариант в моем вопросе? Не отличается ли атрибут 'PostBackUrl' в LinkButton в основном тем же: изменение URL-адреса запроса страницы на URL-адрес без QueryString? URL-адрес жестко закодирован в моем коде, тогда как ваш сценарий, конечно, более общий. Но в моем специальном примере: почему результат не тот же? – Slauma
@egrunin: Забудьте вопросы в моем комментарии. Я не понял разницы между POST и GET. Фактически я должен был использовать 'asp: HyperLink' с свойством' NavigateUrl' вместо LinkButton с PostBackUrl. Теперь я видел, что важная разница в коде - это то, что в случае HyperLink 'IsPostBack == false', тогда как в случае LinkButton' IsPostBack == true', который объясняет совершенно другое поведение. Но использование asp: HyperLink в основном такое же, как и ваше решение. Еще раз спасибо за то, что указал мне в правильном направлении! – Slauma