Asp.net

在 asp.net MVC 中不使用 LabelFor Helper 獲取 DisplayName 屬性

  • October 7, 2010

檢索模型中項目的顯示名稱屬性的最佳方法是什麼?我看到很多人都在使用 LabelFor 幫助器,但如果我只想列出數據,標籤是不合適的。如果我只想列印出來,比如一個段落,有沒有一種簡單的方法來獲取名稱屬性?

<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>

引用自:https://stackoverflow.com/questions/3885796