2012-01-09 112 views
0

我想轉到其他URL並將參數作爲查詢字符串傳遞。該值包含一個&符號。我可以使用Response.Redirect來做到這一點。將包含與符號的值傳遞給其他頁面

Response.Redirect("http://www.mysite.com/?Value=" + Server.UrlEncode("This & That")) 

不過,我更喜歡使用LinkBut​​ton控件的PostBackUrl屬性要做到這一點,因爲我想通過額外的信息,除了在URL中的價值。如果我嘗試

<asp:LinkButton id="ID" runat="server" PostBackUrl="http://www.mysite.com?Value=This+%26+That"/> 

,並單擊IE瀏覽器的鏈接,然後我看到http://www.mysite.com?Value=This+%26+That作爲新的URL,並且可以使用的Request.QueryString [「價值」]獲得的價值。這工作正常。

但是,如果我使用Chrome或Firefox,那麼新的URL是http://www.mysite.com?Value=This+&+That,我得到「This」作爲值而不是「This & That」。看起來,在包含LinkBut​​ton的頁面上的IE和其他瀏覽器中生成不同的JavaScript。我能做些什麼來解決這個問題?爲什麼IE和其他瀏覽器的區別?

如果我使用HyperLink控件的NavigateUrl屬性,那麼我會在所有我試過的瀏覽器中獲得正確的URL。

+0

你通過點擊FF和Chrome檢查?有可能這就是懸停預覽中的鏈接_display_。 – Oded 2012-01-09 11:24:31

+0

爲什麼你要使用該網址....只需使用'http://www.mysite.com?Value = This +&+ That'。它也可以運行 – 2012-01-09 11:25:26

+0

@Oded我點擊鏈接並進入下一頁後,檢查了FF和Chrome中出現的鏈接。此外,我查看了新頁面上的Request.QueryString [「Value」],並發現它在使用這些瀏覽器時返回「This」,但它爲IE返回「This&That」。這並不奇怪。 IE的HTML爲my text。 – mbnovick 2012-01-10 09:40:34

回答

0

u可以使用

protected void LinkButton1_Click(object sender, EventArgs e) 
{ 
    string qs = HttpUtility.UrlEncode("This & That", System.Text.Encoding.Default); 
    Response.Redirect("http://www.mysite.com?Value="+qs); 
} 
+0

這個答案有效,但它基本上與使用Server.UrlEncode相同,這是我在原始問題中提出的。它提交了一個Get請求而不是Post請求,所以它不直接允許向mysite.com URL傳遞額外的信息。它還執行額外的重定向,因此使用HyperLink和NavigateUrl會更好,因爲它避免了重定向。 – mbnovick 2012-01-10 10:09:53

0

我只是碰到了同樣的問題來了,我通過雙編碼值,解決了這個問題。檢索後,您必須手動解碼(第二次,因爲ASP已經自動爲您自動解碼)。

要進行雙重編碼值:

Response.Redirect("http://www.mysite.com/?Value=" + Server.UrlEncode(Server.UrlEncode("This & That"))); 

要獲取原始值:

String value = Server.UrlDecode(Request.QueryString["Value"]);