Was ist der beste Weg, um das Anzeigename Attribut für ein Element in Ihrem Modell abrufen? Ich sehe eine Menge Leute, die den LabelFor-Helfer für alles verwenden, aber ein Label ist nicht geeignet, wenn ich nur die Daten auflisten möchte. Gibt es einen einfachen Weg, um das Namensattribut zu erhalten, wenn ich es nur in einem Absatz ausdrucken möchte?Get DisplayName-Attribut ohne Verwendung von LabelFor Helper in asp.net MVC
Antwort
<p>
<%= Html.Encode(
ModelMetadata.FromLambdaExpression<YourViewModel, string>(
x => x.SomeProperty, ViewData).DisplayName
) %>
<p>
Offensichtlich, um die Spaghetti-Code zu vermeiden, ist es immer eine gute Idee ist, einen Helfer zu schreiben:
public static class HtmlExtensions
{
public static MvcHtmlString GetDisplayName<TModel, TProperty>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression
)
{
var metaData = ModelMetadata.FromLambdaExpression<TModel, TProperty>(expression, htmlHelper.ViewData);
string value = metaData.DisplayName ?? (metaData.PropertyName ?? ExpressionHelper.GetExpressionText(expression));
return MvcHtmlString.Create(value);
}
}
Und dann:
<p>
<%: Html.GetDisplayName(x => x.SomeProperty) %>
</p>
Meiner Meinung nach sollten Sie ein verwenden string als Ergebnistyp, da sonst der Codiermechanismus übersprungen wird. Ein weiterer Punkt ist, dass Sie den DisplayName in einigen Fällen als Zeichenfolge benötigen (d. H. Die Spalten in einer WebGrid-Klasse auffüllen).
sollten Sie versuchen, neue vorhandene Funktion:
<% Html.DisplayNameFor(m => m.YourProperty) %>
Razor: @ Html.DisplayNameFor (Modell => Modell.SomeProperty) –
Much einfacher als die angenommene Antwort. – VDWWD
Danke, Das ist genau das, was ich bin nach plus mehr! –
Beachten Sie, dass Sie folgende 'using's benötigen: using System.Linq; mit System.Linq.Expressions; –
Welche Auswirkungen hat dies auf die Leistung? Ich mag die Idee, dies in allen Ansichten zu verwenden, aber es klingt viel komplexer als nur den Text in der .cshtml – Farinha