Как я могу остановить кодировку asp.net и получить параметры?

Я использую следующий код, чтобы добавить серию вызовов к параметру body страницы в asp.net:

uxBodyTag.Attributes["onbeforeunload"] += 
  "ajaxRequest('UnlockQuery.ashx?QueryID=" + queryId.ToString() + 
  "&UserID=" + Session["UserID"].ToString() + "');";

Это отображается как:

<body id="uxBodyTag" onbeforeunload=
    "ajaxRequest('UnlockQuery.ashx?QueryID=176&amp;UserID=11648');">

Это означает, что моя страница ashx не извлекает правильные переменные - как я могу остановить asp.net от этого?

РЕДАКТИРОВАТЬ:

Использование Server.UrlEncode дает мне следующее:

<body id="uxBodyTag" onbeforeunload=
 "ajaxRequest('UnlockQuery.ashx%3fQueryID%3d179%26UserID%3d11648')%3b">

Что гораздо хуже.


person cjk    schedule 19.02.2009    source источник


Ответы (2)


В HTML амперсанд необходимо кодировать всегда и везде, в том числе и в значениях атрибутов (содержимое тега <script>, очевидно, является заметным исключением). ASP.NET делает все правильно.

Значения атрибутов не будут закодированы браузером до того, как они будут фактически использованы. Таким образом, ваш атрибут onbeforeunload имеет буквальное значение:

ajaxRequest('UnlockQuery.ashx?QueryID=176&UserID=11648');

в то время как представление HTML должно иметь &amp; вместо &. Браузер обычно также понимает плохо закодированную версию, но синтаксический анализатор SGML будет жаловаться на неизвестную/недопустимую сущность с именем &UserID.

person Tomalak    schedule 19.02.2009

Поведение, которое вы видите с помощью &, закодировано как поведение, которое вы хотите. К тому времени, когда текст попадет в вашу функцию ajaxRequest, он снова будет не закодирован, и все должно быть в порядке.

person andynormancx    schedule 19.02.2009
comment
Я проверю это - кажется, у меня сейчас может быть другая проблема, и это была наиболее очевидная вероятная причина. - person cjk; 19.02.2009
comment
Простой тест - просто заменить ajaxRequest на предупреждение, после чего вы увидите, что ваш URL-адрес и строка запроса не повреждены. - person andynormancx; 19.02.2009