我使用以下代码在asp.net中添加对页面的body参数的一系列调用:
uxBodyTag.Attributes["onbeforeunload"] +=
"ajaxRequest('UnlockQuery.ashx?QueryID=" + queryId.ToString() +
"&UserID=" + Session["UserID"].ToString() + "');";
这将呈现为:
<body id="uxBodyTag" onbeforeunload=
"ajaxRequest('UnlockQuery.ashx?QueryID=176&UserID=11648');">
&amp; amp; amp;意味着我的ashx页面没有检索到正确的变量 - 我怎样才能阻止asp.net这样做?
编辑:
使用 Server.UrlEncode 给我以下内容:
<body id="uxBodyTag" onbeforeunload=
"ajaxRequest('UnlockQuery.ashx%3fQueryID%3d179%26UserID%3d11648')%3b">
哪个更糟糕。
答案 0 :(得分:4)
在HTML中,&符号需要始终在任何地方进行编码,也需要在属性值中进行编码(显然,<script>
标记的内容是值得注意的例外)。 ASP.NET做对了。
在实际使用它们之前,浏览器将对属性值进行解码。因此,您的onbeforeunload
属性的字面值为:
ajaxRequest('UnlockQuery.ashx?QueryID=176&UserID=11648');
虽然HTML表示需要&
代替&
。浏览器通常也会理解编码不良的版本,但SGML解析器会抱怨名为&UserID
的未知/无效实体。
答案 1 :(得分:2)
您所看到的行为&amp;编码为&amp; amp;是你想要的行为。当文本到达你的ajaxRequest函数时,它将再次被取消编码,一切都应该没问题。