it-swarm.com.de

Wie mache ich Html.DisplayFor Zeilenumbrüche?

Peinlich Neuling Frage:

Ich habe ein string-Feld in meinem Modell, das Zeilenumbrüche enthält. 

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

zeigt die Zeilenumbrüche nicht an.

Natürlich könnte ich etwas im Modell herumspielen und ein anderes Feld erstellen, das \n durch <br/> ersetzt, aber das scheint kludig zu sein. Wie kann das Lehrbuch funktionieren?

46
Shaul Behr

Eine HtmlHelper-Erweiterungsmethode zum Anzeigen von Zeichenfolgenwerten mit Zeilenumbrüchen: 

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);
}

Und dann können Sie die folgende Syntax verwenden:

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

ich empfehle, die Ausgabe mit css zu formatieren, anstatt cpu zu verwenden, die Seiten-Strings-Manipulation wie .replace verwendet.

fügen Sie einfach diese Stileigenschaft hinzu, um mehrzeilige Texte zu rendern:

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

dann

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

newlines wird wie br -Elemente dargestellt, testen Sie es hier http://refork.com/xaf4

48
Chtiwi Malek

Aus Ihrer Sicht können Sie so etwas versuchen

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

Die Anzeigevorlage ist wahrscheinlich die beste Lösung, aber es gibt eine weitere einfache Möglichkeit, einen HTML-Helfer zu verwenden, wenn Sie wissen, dass Sie nur eine Zeichenfolge anzeigen, z.

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));
        }
    }
}

Und dann würdest du es gerne benutzen:

@using Shaul.Web.Helpers

@Html.ReplaceBreaks(Model.MultiLineText)
4
Ian Routledge

Sie erstellen eine Anzeigevorlage für Ihre Daten . Hier ist ein Beitrag, in dem beschrieben wird, wie das geht . Wie erstelle ich eine MVC Razor-Vorlage für DisplayFor ()

In dieser Vorlage erledigen Sie die eigentliche Übersetzung von Zeilenumbrüchen in 
und was auch immer andere Arbeit für die Präsentation getan werden muss.

3
linkerro

Versuchen Sie es mit
@Html.Raw("<p>" + Html.LabelFor(x => x.Name) + "</p>")

2
Michal B.

Hier ist eine weitere Erweiterungsmethode.

    public static IHtmlString DisplayFormattedFor<TModel>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, string>> expression)
    {
        string value = Convert.ToString(ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData).Model);

        if (string.IsNullOrWhiteSpace(value))
        {
            return MvcHtmlString.Empty;
        }

        value = string.Join("<br/>", value.Split(new[] { Environment.NewLine }, StringSplitOptions.None).Select(HttpUtility.HtmlEncode));

        return new HtmlString(value);
    }
0
LawMan