我正在使用以下内容将文本输出作为<textarea>
HTML元素中输入的换行符。
MvcHtmlString.Create(Model.Post.Description.Replace(Environment.NewLine, "<br />"))
有更好的方法吗?
答案 0 :(得分:63)
有一个更好/更棒的解决方案,采用CSS white-space property:
使用此功能可以避免Cross-site scripting(XSS)漏洞......
<p style="white-space: pre-line">@Model.Message</p>
就像使用ASP.NET MVC Razor引擎的魅力一样。
答案 1 :(得分:23)
您的代码很容易受到XSS攻击,因为它不会对文本进行HTML编码。我会建议你以下:
var result = string.Join(
"<br/>",
Model.Post.Description
.Split(new[] { Environment.NewLine }, StringSplitOptions.None)
.Select(x => HttpUtility.HtmlEncode(x))
);
return MvcHtmlString.Create(result);
然后在您的视图中,您可以安全地使用:
@Html.SomeHelper()
答案 2 :(得分:1)
也许您可以在&lt; pre&gt;内输出文字。标签
答案 3 :(得分:1)
只需使用标签。
<pre>@Model.Post.Description</pre>
或
@Html.Raw(HttpUtility.HtmlDecode(Model.Post.Description.Replace("\r\n", "<br>")))
答案 4 :(得分:0)
这对我有用。
<p class="message">
@Html.Raw("<p>" + Model.Text + "</p>")
</p>
字符串Model.Text具有&lt; BR /&GT;标签里面。
答案 5 :(得分:0)
这是我的解决方案。
@MvcHtmlString.Create(Regex.Replace(Html.Encode(Model.Address), Environment.NewLine, "<br />", RegexOptions.Multiline))
当然,您必须添加以下使用语句才能使Regex正常工作。
@using System.Text.RegularExpressions
希望它对某人有用。
答案 6 :(得分:0)
只需执行以下命令,因为它已启用过滤:
<p style="white-space: pre-line" <p>