2009-02-19 2 views
2

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

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

EDIT:

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

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

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

ответ

4

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

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

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

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

2

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

+0

Я проверю это - кажется, у меня может быть другая проблема на данный момент, и это была самая очевидная вероятная причина. – cjk

+0

Простой тест - это просто заменить ajaxRequest предупреждением, вы увидите, что ваш URL и запрос строка не повреждена. – andynormancx