为特定值编写MVC自定义验证

时间:2013-01-24 05:19:24

标签: c# asp.net asp.net-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 个答案:

答案 0 :(得分:1)

这一行

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

将值数组存储在其中,因此Values [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;
        }