Я использую следующее, чтобы текст выводил разрывы строк, введенные в элемент <textarea>
HTML.
MvcHtmlString.Create(Model.Post.Description.Replace(Environment.NewLine, "<br />"))
Есть ли лучший способ сделать это?
Я использую следующее, чтобы текст выводил разрывы строк, введенные в элемент <textarea>
HTML.
MvcHtmlString.Create(Model.Post.Description.Replace(Environment.NewLine, "<br />"))
Есть ли лучший способ сделать это?
Ваш код уязвим для атак 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()
Там еще лучшее/удивительное решение, в котором используется свойство белого пробела CSS:
Используя это, вы избегаете Уязвимости Cross-Site scripting (XSS)...
<p style="white-space: pre-line">@Model.Message</p>
Работает как шарм с движком ASP.NET MVC Razor.
Возможно, вы можете вывести текст внутри <pre> тег.
Это работает для меня.
<p class="message">
@Html.Raw("<p>" + Model.Text + "</p>")
</p>
строка Model.Text, имеющая < br/" > внутри.
Вот мое решение.
@MvcHtmlString.Create(Regex.Replace(Html.Encode(Model.Address), Environment.NewLine, "<br />", RegexOptions.Multiline))
и, конечно же, вам нужно будет добавить следующую инструкцию для работы Regex.
@using System.Text.RegularExpressions
Надеюсь, что это полезно для кого-то.
Просто используйте тег. <pre>@Model.Post.Description</pre>
Или же
@Html.Raw(HttpUtility.HtmlDecode(Model.Post.Description.Replace("\r\n", "<br>")))