2009-08-28 57 views
9

一個「#」後我收到這樣我如何獲得url部分來自HttpRequestBase

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

GET請求,我需要閱讀SearchGuid這是#後。 不幸的是,HttpRequestBase似乎隱藏了一切#過去。

有人知道我仍然可以從控制器操作中讀取SearchGuid嗎?

tia。

+0

爲什麼「#」而不是「?」 ? – AnthonyWJones 2009-08-28 11:45:44

+0

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

+0

我正在使用ASP.NET AJAX歷史記錄來設置額外的歷史點,即設置附加參數以在「#」後重建最後的ajax調用 – 2009-08-28 11:48:50

回答

17

你不能,它不會被髮送到服務器。

+2

讓我弄清楚這個問題在下次出現時跳過該問題):有人點擊包含#(表示網頁上的錨點,位置)的鏈接。瀏覽器向服務器發送一個GET請求,其中只包含整個頁面的地址,沒有錨點,片段或其他內容。當服務器返回頁面時,瀏覽器知道將它放在哪裏,以便錨點的位置可見。其他答案提到Javascript,因爲它是客戶端,應該可以訪問錨。 – pavium 2009-08-28 12:10:54

+2

是的,這是正確的 – levinalex 2009-08-28 12:54:27

2

您可以在客戶端使用window.location.hash在JavaScript中獲得該部分,將其設置爲一些隱藏的輸入onsubmit,以便它們也會發送到服務器。

3

如果你想處理URL「片段」(這就是'#'後的那些東西被調用),你需要做的是客戶端。碎片不會傳輸到服務器。

要麼重新設計協議以使用查詢字符串(用'?'替換'#'),要麼在客戶端上使用JavaScript來執行必要的處理 - 這可能包括在URI中編寫片段的服務器請求請求參數。

2

'#'片段只能訪問客戶端,但IE8提交URL包含#fragment部分。

您可以使用Ajax使其工作。喜歡的東西:

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

它將看起來像你的要求對客戶端的URL#片段,但實際上,它會請求URL片段,你可以用它在服務器端的工作?

你應該記住的一件事 - 服務器頁面將被請求兩次,所以第二個(Ajax請求 - 檢查請求頭「X-Requested-With = XMLHttpRequest」)你應該採取。

P.S. Google應用程序使用相同的解決方案,就像我從Firebug看到的一樣。