将包含&符号的值传递给不同的页面

时间:2012-01-09 11:17:25

标签: asp.net query-string urlencode navigateurl postbackurl

我想转到其他网址并将参数作为查询字符串传递。该值包含&符号。我可以使用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 [“Value”]来获取值。这很好。

但是,如果我使用Chrome或Firefox,那么新网址为http://www.mysite.com?Value=This+&+That,我将“This”作为值而不是“This&amp; That”。看来在包含LinkBut​​ton的页面上的IE和其他浏览器中生成了不同的JavaScript。我该怎么做才能解决这个问题?为什么IE和其他浏览器有区别?

如果我使用HyperLink控件的NavigateUrl属性,那么我在所有尝试的浏览器中都会获得正确的URL。

2 个答案:

答案 0 :(得分:0)

你可以用

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);
}

答案 1 :(得分:0)

我刚遇到同样的问题,我通过对值进行双重编码来解决它。检索后你必须手动解码(第二次,因为ASP已经为你自动完成了一次)。

对值进行双重编码:

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

获取原始值:

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