当前位置:  开发笔记 > 编程语言 > 正文

在ASP.NET MVC Razor视图中用<br />替换换行符

如何解决《在ASP.NETMVCRazor视图中用<br/>替换换行符》经验,为你挑选了4个好方法。

我有一个接受输入的textarea控件.我想稍后通过简单地使用以下方法将该文本呈现为视图:

@ Model.CommentText

这适当地编码任何值.但是,我想用换行换字符,
我找不到一种方法来确保新的br标签不被编码.我尝试过使用HtmlString,但还没有运气.



1> Jacob Krall..:

使用CSS空白属性而不是打开自己的XSS漏洞!

@Model.CommentText


实际上`white-space:pre-wrap;`更好,因为`pre-line`会通过将空格分组到一个空格来弄乱你的文本.
@Jacob Krall - 我登录后只给你一个+1.神奇的小技巧.
不知道这个.绝对比我的答案更好.
http://www.quirksmode.org/css/whitespace.html对'pre-line`有一个很好的解释(我只知道`nowrap`和`pre`).
不幸的是,这几乎不适用于任何电子邮件客户端(包括Office 2013).
这很棒.我不确定`
`是否真的是好的标记.我认为这取决于具体情况.如果你把
放在那里来修复布局,那就糟糕了.有时,换行符实际上是内容的一部分,就像在诗中一样.但即便如此:在*content*中添加换行符,而不是标记中的`
`,并使用`white-space:pre-line`.
@ChtiwiMalek:我当然同意你通常想要保留所有的空格,但最初的问题是关于将换行符转换成`
`s
这种方法的一个警告是,由于浏览器错误,新行将在复制粘贴时丢失.请参阅https://bugzilla.mozilla.org/show_bug.cgi?id=1174452和https://code.google.com/p/chromium/issues/detail?id=317365

2> Omar..:

请尝试以下方法:

@MvcHtmlString.Create(Model.CommentText.Replace(Environment.NewLine, "
"))

更新:

根据marcind's有关评论此相关的问题时,ASP.NET MVC团队正在实施类似的东西<%:,并<%=为Razor视图引擎.

更新2:

我们可以将有关HTML编码的任何问题转化为有害用户输入的讨论,但已经存在足够的内容.

无论如何,要注意潜在的有害用户输入.

@MvcHtmlString.Create(Html.Encode(Model.CommentText).Replace(Environment.NewLine, "
"))

更新3(Asp.Net MVC 3):

@Html.Raw(Html.Encode(Model.CommentText).Replace("\n", "
"))


对于MVC 3的发布版本,建议似乎是@ Html.Raw(Html.Encode(Model.CommentText).Replace(Environment.NewLine,"
")),而不是使用MvcHtmlString.至少用于展示.
我的上帝啊,不.如果我决定对某些`
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有