将包含与符号的值传递给其他页面

问题描述:

我想转到其他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

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

我只是碰到了同样的问题来了,我通过双编码值,解决了这个问题。检索后,您必须手动解码(第二次,因为ASP已经自动为您自动解码)。

要进行双重编码值:

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

要获取原始值:

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