2016-01-07 60 views
3

我有一個模型,它有一個字符串屬性和枚舉屬性。mvc DisplayName或Display(Name = ...)取決於另一個模型屬性

我想要的標籤,所以DisplayName將取決於枚舉屬性值不同,例如。

public class DisplayItRight 
{ 
    public TypeEnum Type { get; set; } 

    DisplayName(Type == TypeEnum.Apple ? "Good" : "Bad") 
    public string GotIt { get; set;} 
} 

有沒有辦法做到這一點?

+0

你可以檢查我的答案在下面。也許你自己的屬性可以解決問題。只有顯示被封閉纔有可能擴展DisplayName –

回答

1

它看起來像這樣的代碼將僅用於常量類型的工作:

public enum MyEnum 
{ 
    First, 
    Second 
} 

public class LoginViewModel 
{ 

    const MyEnum En = MyEnum.First; 

    [Required] 
    [DataType(DataType.Password)] 
    [Display(Name = (En == MyEnum.First ? "Password" : "aaa"))] 
    public string Password { get; set; } 
} 

應該有與自己實現的顯示名稱可能的第二個選項:

public enum MyEnum 
{ 
    First, 
    Second 
} 

public MyDisplayNameAttribute : DisplayNameAttribute 
{ 
    public MyDisplayNameAttribute (MyEnum en, string text1, string text2) : base (CorrectName (en, text1, text2)) 
    {} 

    public static string CorrectName (MyEnum en, string text1, string text2) 
    { 
     return en == MyEnum.First ? text1 : text2; 
    } 
} 

public class LoginViewModel 
{ 

    const MyEnum En = MyEnum.First; 

    [Required] 
    [DataType(DataType.Password)] 
    [MyDisplayName(MyEnum.Second, "password1", "password2")] 
    public string Password { get; set; } 
} 

不過我不覺得這兩種解決方案都更好,然後添加一些標籤到您的ViewModel