首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET MVC Html.Encode -新行

ASP.NET MVC Html.Encode -新行
EN

Stack Overflow用户
提问于 2009-02-07 20:35:19
回答 5查看 73.6K关注 0票数 25

Html.Encode似乎只是简单地调用HttpUtility.HtmlEncode来用它们的转义序列替换一些html特定的字符。

然而,这并没有提供任何关于如何解释新行和多个空格(标记空白)的考虑。因此,我提供了一个文本区,供用户输入纯文本信息块,然后在另一个屏幕上显示该数据(使用Html.Encode),新行和间距将不会保留。

我认为有两个选择,但也许有人可以推荐更好的第三个。

一种选择是只编写一个使用HtmlEncode的静态方法,然后用<br>替换结果字符串中的新行,用&nbsp;替换多个空格组

另一种选择是在我的样式表中处理white-space: pre属性--然而,当helper方法包含换行符和制表符以使页面源代码更漂亮时,我不确定这是否会产生副作用。

有没有第三个选项,比如全局标志、事件或方法覆盖,我可以用来改变html编码的方式,而不必重做html helper方法?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-02-07 20:46:07

HtmlEncode仅用于编码要在HTML中显示的字符。它特别不对空白字符进行编码。

我会选择您的第一个选项,并将其作为HtmlHelper的扩展方法。类似于:

代码语言:javascript
复制
public static string HtmlEncode(this HtmlHelper htmlHelper,
                                string text, 
                                bool preserveWhitespace)
{
    // ...
}

您可以使用String.Replace()对换行符和空格进行编码(如果需要更好的匹配,也可以使用Regex.Replace )。

票数 23
EN

Stack Overflow用户

发布于 2012-01-18 02:39:13

使用style="white-space:pre-wrap;"对我来说很有效。每个this article

票数 8
EN

Stack Overflow用户

发布于 2012-08-25 06:35:42

如果使用Razor,您可以执行以下操作:

代码语言:javascript
复制
@MvcHtmlString.Create(Html.Encode(strToEncode).Replace(Environment.NewLine, "<br />"))

在您的视图中或在您的控制器中:

代码语言:javascript
复制
HttpServerUtility httpUtil = new HttpServerUtility();
MvcHtmlString encoded = httpUtil.HtmlEncode(strToEncode).Replace(Environment.NewLine, "<br />");

我还没有测试控制器方法,但它应该以相同的方式工作。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/524528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档