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?
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)
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
Aus Ihrer Sicht können Sie so etwas versuchen
@Html.Raw(Html.Encode(Model.MultiLineText).Replace("\n", "<br />"))
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)
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.
Versuchen Sie es mit@Html.Raw("<p>" + Html.LabelFor(x => x.Name) + "</p>")
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);
}