我想转到其他网址并将参数作为查询字符串传递。该值包含&符号。我可以使用Response.Redirect来执行此操作。
Response.Redirect("http://www.mysite.com/?Value=" + Server.UrlEncode("This & That"))
但是,我更喜欢使用LinkButton控件的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”。看来在包含LinkButton的页面上的IE和其他浏览器中生成了不同的JavaScript。我该怎么做才能解决这个问题?为什么IE和其他浏览器有区别?
如果我使用HyperLink控件的NavigateUrl属性,那么我在所有尝试的浏览器中都会获得正确的URL。
答案 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"]);