2013-01-24 56 views
0

我正在編寫MVC自定義驗證。它將對特定值列表有效。例如:爲特定值編寫MVC自定義驗證

[Values(30, 60, 120)] 
public int SelectTop { get; set; } 

但它不適用於我的驗證。這是代碼:

public class ValuesAttribute : ValidationAttribute 
{ 
    public object[] Values { get; private set; } 

    public Type Type { get; private set; } 

    public ValuesAttribute(params int[] values) 
     : this(typeof(int), values) 
    { 
    } 

    public ValuesAttribute(params double[] values) 
     : this(typeof(double), values) 
    { 
    } 

    public ValuesAttribute(Type type, params object[] values) 
    { 
     this.Type = type; 
     this.Values = values; 
    } 

    public override bool IsValid(object value) 
    { 
     foreach (var v in this.Values) 
     { 
      if (object.Equals(v, value)) 
      { 
       return true; 
      } 
     } 

     return false; 
    } 
} 

請幫我找到問題。謝謝。

+1

你是拳擊價值類型,然後比較它們。 –

回答

1

此行

public object[] Values { get; private set; } 

值存儲陣列中這麼值[0] = INT [3]

你的代碼更改爲:

public override bool IsValid(object value) { 
      int[] valueSet = this.Values[0] as int[]; 

      if (valueSet == null) { 
       throw new Exception("Values must be provided"); 
      } 

      foreach (var v in valueSet) { 
       if (object.Equals(v, value)) { 
        return true; 
       } 
      } 

      return false; 
     } 
+0

簡短而甜美 –

+0

將值數組存儲在其中,因此值[0] = int [3] - >當它們與類型不同時發生。 –