我有不同的人應該用不同的名字看到的字段。我可以在同一個字段多次使用IMetadataAware屬性嗎?
例如,假設我有以下用戶類型:
public enum UserType {Expert, Normal, Guest}
予實現的IMetadataAware
屬性:
[AttributeUsage(AttributeTargets.Property, AllowMultiple = true)]
public class DisplayForUserTypeAttribute : Attribute, IMetadataAware
{
private readonly UserType _userType;
public DisplayForUserTypeAttribute(UserType userType)
{
_userType = userType;
}
public string Name { get; set; }
public void OnMetadataCreated(ModelMetadata metadata)
{
if (CurrentContext.UserType != _userType)
return;
metadata.DisplayName = Name;
}
}
的想法是,如需要,我可以覆蓋其它值,但落回默認值,當我不。例如:
public class Model
{
[Display(Name = "Age")]
[DisplayForUserType(UserType.Guest, Name = "Age (in years, round down)")]
public string Age { get; set; }
[Display(Name = "Address")]
[DisplayForUserType(UserType.Expert, Name = "ADR")]
[DisplayForUserType(UserType.Normal, Name = "The Address")]
[DisplayForUserType(UserType.Guest, Name = "This is an Address")]
public string Address { get; set; }
}
的問題是,當我有相同類型的多個屬性,DataAnnotationsModelMetadataProvider
只運行OnMetadataCreated
爲第一個。
在上面的示例中,Address
只能顯示爲「Address」或「ADR」 - 其他屬性永遠不會執行。
如果我嘗試使用不同的屬性 - DisplayForUserType
,DisplayForUserType2
,DisplayForUserType3
,一切都按預期工作。
我在這裏做錯了什麼嗎?
我不知道'TypeId'。如果有人感興趣,這裏有一個很好的解釋:[應該兩個語義相同的屬性的TypeIds是不同的還是相同的?](http://stackoverflow.com/q/8728793/7586)非常感謝, )歡迎來到Stack Overflow! – Kobi 2014-03-06 17:53:51
不用擔心,很高興我可以幫助 - 即使是晚了一年:-) – 2014-03-10 09:47:04
CurrentConte3xt不再可用。是否有可能在MVC5及更高版本中實現類似的功能? – 2015-10-02 09:35:50