2017-08-08 93 views
0

我希望能夠做這樣的事情:驗證十進制值

public class MinimumSalaryAttribute : ValidationAttribute 
    { 
     private readonly decimal _minValue; 

     public MinimumSalaryAttribute(decimal minValue) 
     { 
      _minValue = minValue; 
     } 

     public override bool IsValid(object value) 
     { 
      return (decimal)value > _minValue; 
     } 
    } 

,然後在我的觀點:

[MinimumSalary(0M)] 
public decimal Salary { get; set; } 

這將阻止用戶進入負小數。但是,我收到一個編譯器錯誤:「不是有效的屬性類型」。我理解這裏描述的原因:Why "decimal" is not a valid attribute parameter type?

我的花瓶有什麼解決方法?

+4

您是否真的需要在這裏使用小數?你會限制薪水到12.56嗎?只需使用'int'。這意味着你可以使用普通的'Range'屬性。 – DavidG

+3

你確定'IsValid'有效嗎?我會說它應該返回true,如果'value> = _minValue' ... –

+0

@PeterB,我糾正了這一點。謝謝。 – w0051977

回答

0

您可以使用「範圍」註釋; 10.50D是最小值,50.80D是最大值...

[Range(10.50D,50.80D,ErrorMessage ="Error min")] 
public decimal Salary { get; set; } 

範圍屬性指定數據字段的值的數值範圍的限制。它帶有System.ComponentModel.DataAnnotations(在System.ComponentModel.DataAnnotations.dll中)

+0

謝謝。這似乎工作。 downvoter可以解釋什麼是錯的? – w0051977

+0

@ w0051977我猜測投票是因爲答案的質量,因爲它只是一個代碼轉儲,沒有解釋爲什麼它可以工作。 – DavidG

+0

@DavidG,如果我看到這個答案,那麼我會贊成它,我會的。我覺得它很清楚和簡潔。也許另一段會有幫助。原則上有什麼問題嗎?謝謝。 – w0051977