我正在编写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;
}
}
请帮我找到问题所在。感谢。
答案 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;
}