web-dev-qa-db-ja.com

asp.net MVCでLabelForヘルパーを使用せずにDisplayName属性を取得

モデル内のアイテムの表示名属性を取得する最良の方法は何ですか?多くの人がすべての目的でLabelForヘルパーを使用していますが、データをリストしたいだけではラベルは適切ではありません。段落を印刷するだけで名前属性を取得する簡単な方法はありますか?

62
Graham Conzett
<p>
    <%= Html.Encode(
        ModelMetadata.FromLambdaExpression<YourViewModel, string>(
            x => x.SomeProperty, ViewData).DisplayName
    ) %>
<p>

明らかに、スパゲッティコードを回避するために、ヘルパーを書くことは常に良い考えです。

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

その後:

<p>
    <%: Html.GetDisplayName(x => x.SomeProperty) %>
</p>
109
Darin Dimitrov

新しい既存の関数を試してください:

<% Html.DisplayNameFor(m => m.YourProperty) %>
73
Aelios

私の意見では、結果の型として文字列を使用する必要があります。そうしないと、エンコードメカニズムがスキップされます。もう1つのポイントは、場合によってはDisplayNameを文字列として必要とすることです(つまり、WebGridクラスの列に入力します)。

1
Hardy