HtmlHelper.Button(...,string onClickMethod,...)HTML-encoding的单引号!

时间:2011-02-11 16:24:26

标签: c# asp.net-mvc asp.net-mvc-3

我正在将一个旧项目从MVC 1.0升级到MVC 3.0(是的,它已经老了),我遇到了一个调用HtmlHelper.Button(...,onClickMethod,...)HTML-的问题将单引号编码为'

如果onClickMethod只是在javascript中调用的方法的名称,我可以看到这不会是一个问题,但这就是我们使用它的方式:

return helper.Button(name, buttonText, HtmlButtonType.Button,
    string.Format("window.location='{0}'", url));

现在显然已经破了。

有没有办法绕过这种编码?我可以通过将方法的返回类型更改为字符串来进行黑客攻击,并执行:

return string.Format(helper.Button(name, buttonText, HtmlButtonType.Button,
    "window.location={0}").ToString(), "'" + url + "'");

但这或多或少是一种黑客攻击,而不是优雅。

2 个答案:

答案 0 :(得分:2)

'应该有效。即使文档流包含编码值,浏览器在构建DOM时也会对其进行编码。您可以使用DOM检查工具来查看自己。

如果我在页面上放置以下内容,我会在点击时看到警告框:

<input type="button" onclick="alert(&#39;Hello&#39;);" />

答案 1 :(得分:1)

您可以使用URI类将html代码转换为常规文本

Uri.UnescapeDataString(string);