显示行打破asp.net mvc razor

时间:2011-03-11 18:10:29

标签: c# asp.net-mvc razor textarea line-breaks

我正在使用以下内容将文本输出作为<textarea> HTML元素中输入的换行符。

MvcHtmlString.Create(Model.Post.Description.Replace(Environment.NewLine, "<br />"))

有更好的方法吗?

7 个答案:

答案 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>