2014-06-11 66 views
3

名稱屬性正常工作,但ShortName不起作用。顯示屬性中的短名稱(DataAnnotations)

[Display(Name = "Date of the transfer the task", ShortName = "Trans date")] 
public DateTime TransferDate { get; set; } 

即使當我刪除Name屬性時,ShortName被忽略(「TransferDate」顯示在列標題中)。

在視圖我這樣做:

@Html.DisplayNameFor(model => model.TransferDate) 
+0

檢查看到這個答案了這個答案:[我如何使用ShortName屬性...](http://stackoverflow.com/questions/14255463/how-can-i-use-the-shortname-property-of-the-display-屬性爲我的表heade) – scheien

+1

@scheien這是否意味着它不可能沒有寫我自己的幫手?我認爲它應該是自動的.. – silentfobos

+0

我想這樣根據該職位。您還在您的view =>'@ Html.DisplayNameFor(...)'中引用了'DisplayName'屬性。我不知道任何退縮到ShortName老實說:-) – scheien

回答

5

如果你看一下說明了ShortName propertyDisplay Attribute你會看到它有一個非常有限的範圍內開箱:

Short Name Description

當然,這不會限制您在模型元數據上利用該值,但是沒有任何本地幫助程序可以這樣做。

Starting with MVC 2ModelMetadata提供了兩種方法來訪問底層數據:FromStringExpressionFromLambdaExpression,所以你並不真的需要從頭開始編寫自己的助手或擴展方法開始。

如果編寫HTML輔助方法,你可以做這一切在線:

@ModelMetadata.FromLambdaExpression<RegisterModel, string>( 
      model => model.TransferDate, ViewData).ShortDisplayName}) 

但它也是完全有效的添加一個擴展方法進行訪問的一致性,代碼的重複數據刪除技術,以及改進的錯誤處理

public static class MvcHtmlHelpers 
{ 
    public static MvcHtmlString ShortNameFor<TModel, TValue>(this HtmlHelper<TModel> self, 
      Expression<Func<TModel, TValue>> expression) 
    { 
     var metadata = ModelMetadata.FromLambdaExpression(expression, self.ViewData); 
     var name = metadata.ShortDisplayName ?? metadata.DisplayName ?? metadata.PropertyName; 

     return MvcHtmlString.Create(string.Format(@"<span>{0}</span>", name)); 
    } 
} 

然後用像任何其他的輔助方法:

@Html.ShortNameFor(model => model.TransferDate) 

其他注意事項

相關問題