54 votes

Comment rendre Html.DisplayFor afficher les sauts de ligne?

Question embarrassante pour les débutants:

J'ai un champ string dans mon modèle qui contient des sauts de ligne.

 @Html.DisplayFor(x => x.MultiLineText)
 

n'affiche pas les sauts de ligne.

Évidemment, je pourrais manipuler le modèle et créer un autre champ qui remplacera \n par <br/> , mais cela semble superficiel. Quelle est la façon classique de faire ce travail?

78voto

cwills Points 542

Une méthode d'extension HtmlHelper pour afficher les valeurs de chaîne avec des sauts de ligne:

 public static MvcHtmlString DisplayWithBreaksFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression)
{
    var metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
    var model = html.Encode(metadata.Model).Replace("\r\n", "<br />\r\n");

    if (String.IsNullOrEmpty(model))
        return MvcHtmlString.Empty;

    return MvcHtmlString.Create(model);
}
 

Et puis vous pouvez utiliser la syntaxe suivante:

 @Html.DisplayWithBreaksFor(m => m.MultiLineField)
 

60voto

Chtiwi Malek Points 1574

Je recommande de formater la sortie avec css au lieu d'utiliser cpu qui consomme des chaînes de caractères côté serveur telles que .replace,

Ajoutez simplement cette propriété de style pour rendre les textes multilignes:

 .multiline
{
   white-space: pre-wrap;
}
 

puis

 <div class="multiline">
  my
  multiline
  text
</div>
 

les nouvelles lignes seront rendues comme des éléments br , testez-la ici http://refork.com/xaf4

46voto

slapthelownote Points 2168

À votre avis, vous pouvez essayer quelque chose comme

 @Html.Raw(Html.Encode(Model.MultiLineText).Replace("\n", "<br />"))
 

4voto

Ian Routledge Points 2155

Le modèle d'affichage est probablement la meilleure solution, mais il existe une autre option simple consistant à utiliser un assistant HTML si vous savez que vous ne faites qu'afficher une chaîne, par exemple:

 namespace Shaul.Web.Helpers
{
    public static class HtmlHelpers
    {
        public static IHtmlString ReplaceBreaks(this HtmlHelper helper, string str)
        {
            return MvcHtmlString.Create(str.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None).Aggregate((a, b) => a + "<br />" + b));
        }
    }
}
 

Et puis vous l'utiliseriez comme:

 @using Shaul.Web.Helpers

@Html.ReplaceBreaks(Model.MultiLineText)
 

3voto

linkerro Points 2070

Vous créez un modèle d'affichage pour vos données. Voici un post détaillant comment le faire. Comment créer un modèle de rasoir MVC3 pour DisplayFor ()

Dans ce modèle, vous effectuez la traduction réelle des nouvelles lignes en
et tout autre travail à faire pour la présentation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X