web-dev-qa-db-fra.com

affichage des sauts de ligne asp.net mvc rasoir

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? 

22
raklos

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()
23
Darin Dimitrov

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.

63
Leniel Maccaferri

Peut-être que vous pouvez sortir le texte dans une balise <pre>.

1
willvv

Utilisez simplement une balise. <pre>@Model.Post.Description</pre>

Ou 

@Html.Raw(HttpUtility.HtmlDecode(Model.Post.Description.Replace("\r\n", "<br>")))
1
Abhishek Kanrar

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.

0
Sikandar Amla

Cela fonctionne pour moi.

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

string Model.Text ayant la balise <br /> à l'intérieur.

0
Nalan Madheswaran