显示行打破asp.net mvc razor

rak*_*los 23 c# asp.net-mvc textarea line-breaks razor

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

MvcHtmlString.Create(Model.Post.Description.Replace(Environment.NewLine, "<br />"))
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点?

Len*_*rri 66

有一个更好/更棒的解决方案,采用CSS白色空间属性:

使用此功能可以避免跨站点脚本(XSS)漏洞......

<p style="white-space: pre-line">@Model.Message</p>
Run Code Online (Sandbox Code Playgroud)

像ASP.NET MVC Razor引擎一样魅力.

  • 这实际上应该是公认的答案.因为op要求更好的方式! (4认同)

Dar*_*rov 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);
Run Code Online (Sandbox Code Playgroud)

然后在您的视图中,您可以安全地:

@Html.SomeHelper()
Run Code Online (Sandbox Code Playgroud)


wil*_*lvv 5

也许您可以在 <pre> 标签内输出文本。


Abh*_*rar 5

只需使用一个标签即可。 <pre>@Model.Post.Description</pre>

或者

@Html.Raw(HttpUtility.HtmlDecode(Model.Post.Description.Replace("\r\n", "<br>")))
Run Code Online (Sandbox Code Playgroud)