65

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

4

3 に答える 3

113
<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>
于 2010-10-07T21:04:41.557 に答える
74

新しい既存の関数を試す必要があります:

<% Html.DisplayNameFor(m => m.YourProperty) %>
于 2013-07-04T13:24:05.043 に答える
1

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

于 2012-06-29T10:16:22.423 に答える