MVC动态验证

时间:2012-05-18 02:40:02

标签: asp.net-mvc validation

我得到这样的要求:

不同的航空公司需要不同的旅行者信息。

例如: 航空公司A,需要身份证号码,需要儿童生日,年龄必须在2~12之间。

航空公司B,需要身份证号码和性别。

航空公司C,要求所有旅客过生日,儿童年龄必须在2~12岁之间。

等...

我的问题是:在不同场景中是否有使用不同的验证规则? 此外,所有儿童和成人的信息都收集在一个页面中,因此我需要为旅行者指定验证规则。

如何在 MVC 中执行此操作? 感谢。

2 个答案:

答案 0 :(得分:1)

你可以在mvc中使用IValidateObject。你还没有说明你到目前为止所做的事情,但我会创建一个航空公司的视图模型,并在某种程度上验证它

public class AirlineViewModel: IValidatableObject 
{   
public string AirlineName{ get; set; }

public int IDNo{ get; set; }  

 //  your other properties here  

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
    List<ValidationResult> err = new List<ValidationResult>();
    if(AirlineName.Equals("Airline a"))
    {
       if(IDNo>0)
       {
          yield return new ValidationResult("ID cannot be empty", new[] { "IDNo" });
       }
    }
    else if(AirlineName.Equals("Airline b"))
    {
        //  your stuff here
    }
    else if(AirlineName.Equals("Airline C"))
    {
        //  your stuff here
    }           
}

}

答案 1 :(得分:1)

正如mazhar所提到的,如果您不关心客户端验证,则IValidateableObject是一个选项。另一个选项是创建自己的数据注释属性。第三种选择是使用第三方验证库,如Fluent验证。