0

我正在编写 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;
    }
}

请帮我找出问题所在。谢谢。

4

1 回答 1

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;
        }
于 2013-01-24T05:31:51.403 回答