2013-07-23 34 views
0

我有一個包含文本,以示對財產的國家屬性CountryText,所以我需要做的somehing這樣的:顯示dataannotation取決於其他財產MVC4

[Display(Name=CountryText)] 
     public string Country { get; set; } 
     public string CountryText { get; set; } 

我該怎麼辦呢?請

+0

顯示名稱是恆定的,所以你水溼恰克當運行應用程序/有什麼例子,你可以在這個環節與顯示器做http://msdn.microsoft.com /en-us/library/dd901590(v=vs.95).aspx –

回答

0

更新: 這是不可能的。

您需要一個自定義屬性來修飾您的屬性以及自定義模型元數據提供程序(通常從DataAnnotationsModelMetadataProvider繼承,這是MVC應用程序中的默認值)。自定義提供程序將需要設置定製屬性中定義的元數據。

問題是,您無法從模型元數據提供者訪問模型。您可以訪問有關類型(模型類型,容器類型,屬性...)的信息,但不能訪問模型的具體實例,因此無法獲取屬性值並在提供程序中使用它。

替代

但是,您可以使用Html.Label顯示領域的稱號。

如果你想讓它更「自動」,你可以alwasy寫一個自定義的HTML幫手,爲你創建標籤。此幫助程序可以完全訪問模型類型和模型內容,因此您仍然可以使用自定義屬性,在html幫助程序代碼中查找它,並使用其他屬性的內容。

如果可以用元數據提供商

您的自定義元數據提供者應該添加所有neccesary metadata的視圖模型屬性。此元數據提供程序可以基於約定或使用自定義屬性來添加其他信息。

這些博客條目解釋瞭如何實現自定義屬性和元數據提供程序。

+0

在自定義顯示名稱中,我如何獲取我的屬性DisplayNameProperty的值? – user1428798

+0

你必須使用反射。你有所有可用的模型。您可以通過反思找到您的模型的屬性。像這樣:Type modelType = model.GetType(); PropertyInfo prop = modelType.getProperty(...); string title = prop.GetValue(model,null).ToString(); (這是真心話,也許它不是確切的,但與你需要做的非常相似)。 – JotaBe

+0

我沒有在我的customDisplayName – user1428798