如何在Html.TextBoxFor方法中为javascript添加单引号?

时间:2011-02-01 03:40:01

标签: javascript asp.net-mvc-2 asp.net-mvc-3

我试图在Html.TextBoxFor方法中添加一个javascript方法作为自定义属性,如下所示:

<%: Html.TextBoxFor(model => model.DateCreated, new { size="15", onfocus="myObject.myFunction(this, 'DateCreated');return false;"}) %>

我遇到的问题是单引号字符是html编码的,这是我对<%:的一种预测。有没有办法阻止html编码只是那个片段(比如使用\来转义字符串中的字符)?是否有不同的添加此自定义属性的方法?或者我只是做错了吗?

2 个答案:

答案 0 :(得分:2)

即使正在编码引号,您的javascript也应该有效。例如,以下代码段会提醒正确的文字:

<%: Html.TextBox("DateCreated", "", new { onclick="alert('DateCreated');return false;"}) %>

实现此目的的另一种方法是使用不显眼的javascript而不是将标记与脚本混合:

<%: Html.TextBoxFor(model => model.DateCreated, new { size="15", id="date" }) %>

然后在一个单独的javascript文件中使用jquery:

$(function() {
    $('#date').focus(function() {
        myObject.myFunction(this, 'DateCreated');
        return false;
    });
});

答案 1 :(得分:1)

.NET 4中的默认编码器对其认为可能不安全的字符进行编码,包括',',&amp;,&lt;和&gt ;.但是,此编码不应影响您的Javascript代码段的执行尝试包含,因为浏览器会在将其传递给Javascript解析器之前自动将&amp;#39;重新转换为'字符。如果这仍然会对您的应用程序产生负面影响,请回复以便我们可以考虑提交正式错误

如果需要,可以将ASP.NET使用的默认编码器更改为您自己的创建。 Phil在http://haacked.com/archive/2010/04/06/using-antixss-as-the-default-encoder-for-asp-net.aspx概述了连接Anti-XSS编码器所需的步骤。但是如果你愿意的话,你可以制作一个自定义的HttpEncoder,通过遵循相同的基本步骤来编码除了'字符之外的所有内容。