J'utilise ce qui suit pour que le texte produise les sauts de ligne saisis dans un élément HTML <textarea>
.
MvcHtmlString.Create(Model.Post.Description.Replace(Environment.NewLine, "<br />"))
Y a-t-il une meilleure façon de faire cela?
Votre code est vulnérable aux attaques XSS car il ne code pas le texte en HTML. Je vous recommanderais ce qui suit:
var result = string.Join(
"<br/>",
Model.Post.Description
.Split(new[] { Environment.NewLine }, StringSplitOptions.None)
.Select(x => HttpUtility.HtmlEncode(x))
);
return MvcHtmlString.Create(result);
et à votre avis, vous pouvez en toute sécurité:
@Html.SomeHelper()
Il existe une solution encore meilleure/géniale qui utilise Propriété CSS white-space :
En évitant cela, vous évitez les scripts inter-sites (XSS) ...
<p style="white-space: pre-line">@Model.Message</p>
Fonctionne comme un charme avec le moteur ASP.NET MVC Razor.
Peut-être que vous pouvez sortir le texte dans une balise <pre>.
Utilisez simplement une balise. <pre>@Model.Post.Description</pre>
Ou
@Html.Raw(HttpUtility.HtmlDecode(Model.Post.Description.Replace("\r\n", "<br>")))
Voici ma solution.
@MvcHtmlString.Create(Regex.Replace(Html.Encode(Model.Address), Environment.NewLine, "<br />", RegexOptions.Multiline))
et bien sur, vous devrez ajouter ce qui suit pour utiliser Regex.
@using System.Text.RegularExpressions
J'espère que c'est utile pour quelqu'un.
Cela fonctionne pour moi.
<p class="message">
@Html.Raw("<p>" + Model.Text + "</p>")
</p>
string Model.Text ayant la balise <br /> à l'intérieur.