2009-08-28 3 views
9

Я получаю запросы GET, как этотКак я могу получить URL-адрес часть после «#» от HttpRequestBase

http://localhost/controller/List#SearchGuid=755d259d-e7c9-4c5a-bf2a-69f65f63df8d

и мне нужно прочитать SearchGuid, который после #. К сожалению, HttpRequestBase кажется, что скрывает все, что прошло мимо #.

Кто-нибудь знает, как я все еще мог прочитать SearchGuid из-за действия контроллера?

tia.

+0

Почему «#», а не «?» ? – AnthonyWJones

+0

sed -es/Why/Really/ – 2009-08-28 11:46:47

+0

Я использую историю ASP.NET AJAX для установки дополнительных точек истории, которые устанавливают дополнительный параметр для восстановления последнего вызова ajax после «#» –

ответ

17

Вы не можете, он не отправляется на сервер.

+2

Позвольте мне получить это прямо (так что я могу пропустите вопрос в следующий раз, когда он появится): кто-то нажимает на ссылку, содержащую # (что означает якорь, позиция, на веб-странице). Браузер отправляет запрос GET на сервер, содержащий только адрес всей страницы, без привязки, фрагмента или чего-то еще. Когда сервер возвращает страницу, браузер знает, где ее расположить, чтобы местоположение якоря было видимым. В других ответах упоминается Javascript, потому что он клиентский и должен иметь доступ к якорю. – pavium

+2

да, это правильно – levinalex

2

Вы можете получить эту часть в JavaScript на стороне клиента, используя window.location.hash, установите ее на скрытый ввод onsubmit, чтобы они также были отправлены на сервер.

3

Если вы хотите обработать URL-адреса «фрагментов» (это то, что называются этими вещами после «#»), вам нужно будет сделать это на стороне клиента. Фрагменты не передаются на сервер.

Либо переработайте протокол для использования строки запроса (замените «#» на «?»), Либо используйте javascript на клиенте для выполнения необходимой обработки - что может включать в себя запрос сервера, который кодирует фрагмент в URI Строка запроса.

2

'#' Фрагмент доступен только на стороне клиента, однако URL-адрес отправки IE8 включает часть #фрагмента.

Вы можете использовать Ajax, чтобы заставить его работать. Что-то вроде:

var fragment = location.hash; // on page load 
$.get('/yoururl' + '?' + fragment.replace(/^.*#/, '')); 

Это будет похоже, вы запрашиваете URL # фрагмент на стороне клиента, но на самом деле, он будет запрашивать URL фрагмент, и вы можете работать с ним на стороне сервера?.

Одна вещь, о которой вы должны помнить - страница сервера будет запрашиваться дважды, поэтому вторая (запрос Ajax - проверьте заголовок запроса «X-Requested-With = XMLHttpRequest»), который вы должны принять.

P.S. Приложения Google используют одно и то же решение, как я вижу из Firebug.

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