我能否停止 .net 4.0 对单引号进行编码?

7
在切换到.net 4.0之后,第三方gridview中的一些javascript代码会崩溃。 这与 HtmlEncode和UrlEncode现在编码单引号有关
因此,在页面上插入了一些代码之前,它是这样的: DataItem.GetMember('Id').Value 现在是这样的:DataItem.GetMember('Id').Value gridview对该行执行eval,并且现在由于语法错误而崩溃。我无法更改那个gridview中的javascript代码。
有没有办法解决这个问题,而不需要倒退回去?
<pages controlRenderingCompatibilityVersion="3.5" /> 

编辑:页面控制渲染兼容性版本也无法解决此问题。单引号仍然被编码。


你正在使用WebForms还是MVC? - Johnny_D
有趣的问题。 “eval”很糟糕,所以不幸的是你需要用它。:( - Almo
看起来我可以在进入黑盒子之前更改最终进入 eval 的代码,所以我没问题了。但我会让这个问题保持开放状态,以便其他遇到同样问题的人可以参考。 - Erik Dekker
1个回答

1
据我所读,这是一项安全功能,微软对更改此功能保持沉默。我看到的唯一解决方法是您需要创建一个自定义编码器类。您可以使用以下方法关闭属性编码:
public class HtmlAttributeEncodingQuote : System.Web.Util.HttpEncoder
{
    protected override void HtmlAttributeEncode(string value, System.IO.TextWriter output)
    {
        output.Write(value);
    }
}

然后在 web.config 文件的 system.web 标签下添加以下内容:

<httpRuntime encoderType="HtmlAttributeEncodingQuote"/>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接