使用Attributes.Add时,.Net 4.0编码单引号

Has*_*dad 9 c# asp.net encoding .net-4.0 asp.net-4.0

当我使用Attributes.Add将客户端事件添加到我的asp.net对象时,.Net 4.0正在编码单引号.在以前的版本中,这没有发生.

例如 :

<asp:Image runat="server" ID="imgTest" ImageUrl="~/DateControl/cal.gif" />

 imgTest.Attributes.Add("onmouseover", "alert('Hello')");
Run Code Online (Sandbox Code Playgroud)

当我查看客户端输出时,我得到了

 <img id="ctl00_MainContent_calFromTimeStamp1_imgTest" onmouseover="alert(&#39;Hello&#39;)" src="../DateControl/cal.gif" style="border-width:0px;" />
Run Code Online (Sandbox Code Playgroud)

我通过创建自定义编码器找到了一种解决方法:创建自定义编码例程但我不想因为这个问题而停止整个网站的编码.任何人都有一个解决方法或如何解决这个问题的想法?

Has*_*dad 0

感谢 Franzo 的链接,其中复制并粘贴了以下答案:

您可以通过创建如下类来关闭属性编码:

public class HtmlAttributeEncodingNot : System.Web.Util.HttpEncoder
{
    protected override void HtmlAttributeEncode(string value, System.IO.TextWriter output)
    {
        output.Write(value);
    }
}
Run Code Online (Sandbox Code Playgroud)

并将其添加到 web.config 下:

<httpRuntime encoderType="HtmlAttributeEncodingNot"/>
Run Code Online (Sandbox Code Playgroud)

这给了我所需的控制力。

然而,现在我们必须担心新的控件可能依赖于新的标准 4.0 行为并且不编码单引号,因此它仍然不完美,不,比不完美更糟糕:安全性更差,因为我们不知道哪里发生了什么,所以这确实不是一个很好的解决方法。

我认为只有微软才能正确解决这个问题。其他人建议在这里需要一个 HtmlAttributeString 类:链接 如果有这样一个类,并且 Attributes.Add 可以采用这样的对象作为其值参数,那么我们将再次拥有我们需要的控件。