передать значение, содержащее амперсанд, на другую страницу - PullRequest
0 голосов
/ 09 января 2012

Я хочу перейти на другой URL и передать параметр в виде строки запроса. Это значение содержит амперсанд. Я могу использовать Response.Redirect для этого.

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

Однако я предпочитаю использовать свойство PostBackUrl элемента управления LinkButton, чтобы сделать это, потому что я хочу передать дополнительную информацию в дополнение к значению в 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». ». Похоже, что другой JavaScript генерируется в IE и других браузерах на странице, содержащей LinkButton. Что я могу сделать, чтобы обойти проблему? Почему разница между IE и другими браузерами?

Если вместо этого я использую свойство NavigateUrl элемента управления HyperLink, я получу правильный URL-адрес во всех браузерах, которые я пробовал.

Ответы [ 2 ]

0 голосов
/ 05 марта 2013

Я только что столкнулся с той же проблемой, я решил ее двойным кодированием значения.После извлечения вы должны декодировать его вручную (во второй раз, потому что ASP делает это уже один раз автоматически для вас).

Для двойного кодирования значения:

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

Чтобы получитьИсходное значение:

String value = Server.UrlDecode(Request.QueryString["Value"]);
0 голосов
/ 09 января 2012

вы можете использовать

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