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('Hello')" src="../DateControl/cal.gif" style="border-width:0px;" />
Run Code Online (Sandbox Code Playgroud)
我通过创建自定义编码器找到了一种解决方法:创建自定义编码例程但我不想因为这个问题而停止整个网站的编码.任何人都有一个解决方法或如何解决这个问题的想法?
感谢 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 可以采用这样的对象作为其值参数,那么我们将再次拥有我们需要的控件。
| 归档时间: |
|
| 查看次数: |
6472 次 |
| 最近记录: |