2015-10-28 63 views
4

我想覆蓋ASP.net MVC中的最大長度錯誤消息。基本上,我想使錯誤消息字符串如下:覆蓋MVC中的最大長度錯誤消息

[DisplayName]長度不應超過[x]。但是,我不知道如何在內部包含displayname屬性值。

public class MyMaxLengthAttribute : MaxLengthAttribute 
{ 
    public MyMaxLengthAttribute(int length) : base(length) 
    { 
     ErrorMessage = "What should I input here" 
    } 
} 

回答

4

如果使用StringLengthAttribute{0}指的是顯示名稱和{2}指長度。

public class MyMaxLengthAttribute : StringLengthAttribute 
{ 
    public MyMaxLengthAttribute(int length) : base(length) 
    { 
     ErrorMessage = "{0} length should not be more than {2}" 
    } 
} 
+0

是。這可能是我想要的。我可以知道哪裏{0},{1},{2}爲每個屬性引用了哪些參考。此外,是否有可能直接覆蓋stringlength屬性而不繼承? – stackdisplay

+0

@stackdisplay我最終只是測試一個現有的,即'[StringLength(100,ErrorMessage =「0:{0},1:{1},2:{2},'。我找不到任何關於它的文檔:) – hutchonoid

+0

@stackdisplay其實有人在這裏詳細說明。 '{0}索引是屬性的顯示名稱,{1}是MaximumLength,{2}是MinimumLength。所以,你的錯誤信息將被合成爲「Foo必須至少有6個字符長。」http://stackoverflow.com/questions/13425320/what-parameters-does-the-stringlength-attribute-errormessage-take – hutchonoid

1

嗨我沒有在這裏訪問計算機,但我相信你必須做一些事情。

public class MyMaxLengthAttribute : MaxLengthAttribute 
{ 
    private static String CustomErrorMessage = "{0} length should not be more than {1}"; 
    public MyMaxLengthAttribute(int length) : base(length) 
    { 
     ErrorMessage = "What should I input here" 
    } 

    public override string FormatErrorMessage(string name) 
    { 
     if (!String.IsNullOrEmpty(ErrorMessage)) 
     { 
      ErrorMessage = MyErrorMessage; 
     } 
     return String.Format(CultureInfo.CurrentUICulture, CustomErrorMessage , name); 
    } 
} 
+0

嗨,在重寫MyMaxLengthAttribute和FormatErrorMessage中的ErrorMessage有什麼不同?任何優點和缺點?在我看來,兩者都給出了相同的結果。 – stackdisplay

+0

嗨,說實話我不確定。他們似乎做同樣的事情,但他們有不同的定義,即MSDN [ErrorMessage](https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.validationattribute.errormessage(v = vs.110 ).aspx)/ MSDN [FormatErrorMessage](https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.validationattribute.formaterrormessage(v = vs.110).aspx)。 –