Как я могу остановить кодирование asp.net & в Получить параметры? - PullRequest
2 голосов
/ 19 февраля 2009

Я использую следующий код, чтобы добавить серию вызовов к параметру 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');">

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

EDIT:

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

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

Что намного хуже.

Ответы [ 2 ]

4 голосов
/ 19 февраля 2009

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

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

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

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

2 голосов
/ 19 февраля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...