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["Value"] 来获取值。这很好用。

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

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

4

2 回答 2

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);
}
于 2012-01-09T11:43:33.840 回答
0

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

对值进行双重编码:

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

获取原始值:

String value = Server.UrlDecode(Request.QueryString["Value"]);
于 2013-03-05T07:58:00.850 回答