asp.net mvc2验证

时间:2010-09-22 15:14:12

标签: validation data-annotations asp.net-mvc-2-validation

我正在使用DataAnnotations进行验证(包括客户端)

我有一个包含多个字段的表单。各个字段的基本验证工作正常。现在有几个字段,其中至少需要一个值(如果有3个字段,那么第一个或第二个或第三个字段应该有一个值)。

我在这个网站上看了很多帖子和几个博客条目。但我找不到适用于上述场景的解决方案。我可能错过了某些内容或做错了。

请帮忙解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

试试这个

[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
public sealed class EitherOr : ValidationAttribute
{
    private const string _defaultErrorMessage = "'{0}' OR '{1}' OR '{2}' must have a value";
    private readonly object _typeId = new object();

    public EitherOr(string prop1, string prop2, string prop3)
        : base(_defaultErrorMessage)
    {
        Prop1 = prop1;
        Prop2 = prop2;
        Prop3 = prop3;

    }

    public string Prop1 { get; private set; }
    public string Prop2 { get; private set; }
    public string Prop3 { get; private set; }

    public override object TypeId
    {
        get
        {
            return _typeId;
        }
    }

    public override string FormatErrorMessage(string name)
    {
        return String.Format(CultureInfo.CurrentUICulture, ErrorMessageString, Prop1, Prop2,Prop3);
    }

    public override bool IsValid(object value)
    {
        if(string.IsNullOrEmpty(Prop1)&&string.IsNullOrEmpty(Prop2) && string.IsNullOrEmpty(Prop3))
        {
            return false;
        }
        return true;
    }

然后使用EitherOr属性标记您的类:

[EitherOr("Bar","Stool","Hood", ErrorMessage = "please supply one of the properties")]
    public class Foo
    {
        public string Bar{ get; set;}
        public string Stool{ get; set;}
        public string Hood{ get; set;}
    }

请注意我使用了字符串属性,如果您的属性是其他类型,makle肯定会更改IsValid(object value)验证