2010-03-19 3 views
2

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

ответ

2

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

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

<input type="button" 
    onclick="javascript:window.location = stripQuerystring();" 
    value="Click Me"> 
+0

Спасибо, это работает! Но почему? И почему не первый вариант в моем вопросе? Не отличается ли атрибут 'PostBackUrl' в LinkButton в основном тем же: изменение URL-адреса запроса страницы на URL-адрес без QueryString? URL-адрес жестко закодирован в моем коде, тогда как ваш сценарий, конечно, более общий. Но в моем специальном примере: почему результат не тот же? – Slauma

+0

@egrunin: Забудьте вопросы в моем комментарии. Я не понял разницы между POST и GET. Фактически я должен был использовать 'asp: HyperLink' с свойством' NavigateUrl' вместо LinkButton с PostBackUrl. Теперь я видел, что важная разница в коде - это то, что в случае HyperLink 'IsPostBack == false', тогда как в случае LinkButton' IsPostBack == true', который объясняет совершенно другое поведение. Но использование asp: HyperLink в основном такое же, как и ваше решение. Еще раз спасибо за то, что указал мне в правильном направлении! – Slauma

Смежные вопросы