web-dev-qa-db-fra.com

asp.net mvc convertir\n nouvelle ligne en html

J'ai un textarea dans mvc. Lorsque les données sont entrées et que je les affiche à nouveau à l'utilisateur, comment puis-je afficher les sauts de ligne?

J'affiche comme ceci:

<%= Model.Description%>
27
Shawn Mclean

La classe suivante implémente un HtmlHelper qui code correctement le texte:

public static class HtmlExtensions
{
    public static MvcHtmlString Nl2Br(this HtmlHelper htmlHelper, string text)
    {
        if (string.IsNullOrEmpty(text))
            return MvcHtmlString.Create(text);
        else
        {
            StringBuilder builder = new StringBuilder();
            string[] lines = text.Split('\n');
            for (int i = 0; i < lines.Length; i++)
            {
                if (i > 0)
                    builder.Append("<br/>\n");
                builder.Append(HttpUtility.HtmlEncode(lines[i]));
            }
            return MvcHtmlString.Create(builder.ToString());
        }
    }
}

Il est facile d'utiliser dans vos vues:

<%= Html.Nl2Br(Model.MultilineText) %>

Ou avec rasoir:

@Html.Nl2Br(Model.MultilineText)
50
Codo

Pour une manière légèrement différente (et, à mon humble avis, meilleure et plus sûre) de résoudre le problème, voir cette réponse à une question similaire .

Au lieu de résoudre le problème de la conversion de tous les nouveaux caractères de la ligne en éléments <br>, il suffit simplement d'appliquer le code CSS suivant à l'élément où vous affichez le texte saisi:

white-space: pre-line
14
mkataja

Vous devez toujours encoder le texte saisi par l'utilisateur lors de sa réaffichage dans la vue pour vous assurer qu'il est sécurisé.

Vous pouvez faire comme Cybernate l’a suggéré ou l’ajouter à une méthode d’extension HtmlHelper

public static string EncodedMultiLineText(this HtmlHelper helper, string text) {
  if (String.IsNullOrEmpty(text)) {
    return String.Empty;
  }
  return Regex.Replace(helper.Encode(text), Environment.NewLine, "<br/>")
}

Pour qu'il puisse être facilement réutilisé dans votre vue

<%= Html.EncodedMultiLineText(Model.Description) %>
9
David Glenn

Essayez quelque chose comme ça:

<%=
Regex.Replace(
              Html.Encode(Model.Description), 
              Environment.NewLine, 
              "<br/>", 
              RegexOptions.IgnoreCase||RegexOptions.Multiline
             )
%>
6
Chandu

La réponse ci-dessus qui fournit une extension d'assistance HTML statique fournit un constructeur obsolète:

return new MvcHtmlString(builder.ToString());

Cette ligne peut être remplacée par la ligne de code suivante:

return MvcHtmlString.Create((builder.ToString()));
5
Roland Schaer

Je pense que cette réponse résout les problèmes de façon agréable, en utilisant simplement css: style="white-space: pre-line", vérifiez également: CSS, espace blanc .

3
Raúl Otaño

Pour Asp.net mvc razor, j’ai utilisé Html.Encode pour bloquer les attaques XSS.

@Html.Raw(Html.Encode(Model.Description).Replace(Environment.NewLine, "<br />"))
1

J'aime utiliser HtmlExtensions, Environment.NewLine et Regex, qui se trouvaient dans des réponses différentes. J'ai donc mis les réponses ci-dessus dans une seule méthode.

public static MvcHtmlString MultiLineText(this HtmlHelper htmlHelper, string text) {
 if (string.IsNullOrEmpty(text)) {
     return MvcHtmlString.Create(string.Empty);
 }
 return MvcHtmlString.Create(Regex.Replace(HttpUtility.HtmlEncode(text), Environment.NewLine, "<br/>"));
}

Utilisation

<%= Html.MultiLineText(Model.MultilineText) %>

Ou

@Html.MultiLineText(Model.MultilineText)
1
Alvis

Peut-être que c'est la réponse: Comment gérez-vous les sauts de ligne dans la vue MVC HTML codée?

ou

tu peux essayer:

Model.Description.Replace(Environment.NewLine, "<br/>");
0
alexl

Cela fonctionne pour moi -

<% = HttpUtility.HtmlDecode (Html.ActionLink ("AOT <br /> numéro de demande", "nom action"))%>

0
Hemant Tank