【问题标题】:How can I stop asp.net encoding & in Get params?如何在获取参数中停止 asp.net 编码和?
【发布时间】:2010-10-08 13:13:28
【问题描述】:

我正在使用下面的代码在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&amp;UserID=11648');">

&意味着我的 ashx 页面没有检索到正确的变量 - 我怎样才能阻止 asp.net 这样做?

编辑:

使用 Server.UrlEncode 给了我以下内容:

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

这更糟糕。

【问题讨论】:

    标签: asp.net url parameters get


    【解决方案1】:

    你看到的 & 编码为 & 的行为是你想要的行为。当文本到达您的 ajaxRequest 函数时,它将再次未编码,一切都应该没问题。

    【讨论】:

    • 我会检查一下 - 我现在可能有另一个问题,这是最明显的可能原因
    • 一个简单的测试就是将ajaxRequest替换为alert,然后你会看到你的URL和查询字符串是完整的。
    【解决方案2】:

    在 HTML 中,& 符号需要被编码,无论何时何地,属性值也是如此(&lt;script&gt; 标记的内容显然是一个明显的例外)。 ASP.NET 做了正确的事。

    浏览器在实际使用属性值之前不会对其进行编码。所以你的 onbeforeunload 属性的字面值是:

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

    而 HTML 表示需要使用 &amp;amp; 代替 &amp;。浏览器通常也能理解错误编码的版本,但 SGML 解析器会抱怨名为 &amp;UserID 的未知/无效实体。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多