加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – ASP.NET MVC Textarea HTML帮助器在使用AntiXssL

发布时间:2020-12-16 07:16:05 所属栏目:asp.Net 来源:网络整理
导读:我注意到ASP.NET MVC的TextAreaFor HTML帮助程序中最烦人(可能)的错误.出于某种原因,HTML帮助程序会在textarea中的任何内容之前添加NewLine.显然,这是为了解决个人内容的可能问题,从有意的新线开始,浏览器按照规范忽略它. 然而,通过添加它,我得到了更多烦人
我注意到ASP.NET MVC的TextAreaFor HTML帮助程序中最烦人(可能)的错误.出于某种原因,HTML帮助程序会在textarea中的任何内容之前添加NewLine.显然,这是为了解决个人内容的可能问题,从有意的新线开始,浏览器按照规范忽略它.

然而,通过添加它,我得到了更多烦人的错误,现在我的所有textareas在表单加载之前自动有一个额外的行(即在我的字段中的任何内容之前显示:).在吐出之前,似乎某些东西正在编码“换行符”.

任何人有一个解决方法吗?我希望打算输出它的预期行为

<textarea>
    Stuff</textarea>

不是

<textarea>&#13;&#10;Stuff</textarea>

我越来越…

编辑
经过进一步检查,这似乎是由于我使用AntiXssLibrary进行编码而不是默认的HtmlEncoder.我使用的是4.0版,我的编码器类方法如下所示:

protected override void HtmlEncode(string value,TextWriter output)
    {
        output.Write(Microsoft.Security.Application.Encoder.HtmlEncode(value));
    }

所以我的想法是,因为从TextAreaHelper调用的TagBuilder类,HTML编码标签的内容,它是默认HTML编码器的行为,但AntiXssLibrary更彻底,因此你看到这种行为?

解决方法

在做了一些代码挖掘后,我发现我的想法是正确的. MVC3 TextArea HTML Helper使用TagBuilder类,并执行以下操作:

tagBuilder.SetInnerText(Environment.NewLine + value);

当SetInnerText对传递给它的参数的内容调用HttpUtility.Encode时,这会导致默认编码器不仅在实际VALUE上调用,而且在此Environment.NewLine上调用,这意味着如果您没有使用默认编码器HtmlEncoder(就像AntiXssLibrary一样),可能会有一些意想不到的行为,就像这样.

修复将是他们改为调用:

tagBuilder.InnerHtml = Environment.NewLine + HttpUtility.Encode(value);

我已经提交了一份错误报告.

与此同时,我正在实现一个Javascript onLoad修复,以从所有textareas中删除有问题的编码:

$("textarea").each(function () { $(this).val($(this).val().trim()); });

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读