отображение разрывов строк asp.net mvc бритва - PullRequest
23 голосов
/ 11 марта 2011

Я использую следующее, чтобы текст выводил разрывы строк, введенные в <textarea> элемент HTML.

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

Есть ли лучший способ сделать это?

Ответы [ 6 ]

64 голосов
/ 11 января 2013

Существует еще лучшее / удивительное решение, которое использует Свойство CSS пробела :

Используя это, вы избегаете Межсайтовых скриптов (XSS) уязвимостей ...

<p style="white-space: pre-line">@Model.Message</p>

Работает как шарм с движком ASP.NET MVC Razor.

23 голосов
/ 11 марта 2011

Ваш код уязвим для атак 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()
1 голос
/ 23 января 2019

Просто используйте тег. @Model.Post.Description

или

@Html.Raw(HttpUtility.HtmlDecode(Model.Post.Description.Replace("\r\n", "<br>")))
1 голос
/ 11 марта 2011

Может быть, вы можете вывести текст внутри тега

. 
0 голосов
/ 28 марта 2017

Вот мое решение.

@MvcHtmlString.Create(Regex.Replace(Html.Encode(Model.Address), Environment.NewLine, "<br />", RegexOptions.Multiline))

и, конечно, вам нужно добавить следующее, используя оператор для регулярного выражения Regex.

@using System.Text.RegularExpressions

Надеюсь, это кому-нибудь пригодится.

0 голосов
/ 25 февраля 2013

Это работает для меня.

<p class="message">
@Html.Raw("<p>" + Model.Text + "</p>")
</p>

string Model.Text с тегом
внутри.

...