我得到这样的要求:
不同的航空公司需要不同的旅客信息。
例如:航空公司A,需要身份证号码,孩子生日是必需的,年龄必须在2~12岁之间。
航空公司 B ,需要身份证号码和性别。
航空公司 C,要求所有旅客的生日,儿童年龄必须在 2 ~12 岁之间。
ETC...
我的问题是:有没有在不同的场景中使用不同的验证规则?此外,所有儿童和成人的信息都集中在一页中,因此我需要指定旅行者实例的验证规则。
我怎样才能在MVC中做到这一点?谢谢。
我得到这样的要求:
不同的航空公司需要不同的旅客信息。
例如:航空公司A,需要身份证号码,孩子生日是必需的,年龄必须在2~12岁之间。
航空公司 B ,需要身份证号码和性别。
航空公司 C,要求所有旅客的生日,儿童年龄必须在 2 ~12 岁之间。
ETC...
我的问题是:有没有在不同的场景中使用不同的验证规则?此外,所有儿童和成人的信息都集中在一页中,因此我需要指定旅行者实例的验证规则。
我怎样才能在MVC中做到这一点?谢谢。
那么你可以在 mvc 中使用 IValidateObject 。到目前为止,您还没有指定您所做的事情,但我会创建一个 Airline viewmodel 并像这样验证它
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
}
}
}
正如mazhar 提到的,如果您不关心客户端验证,IValidateableObject 是一种选择。创建您自己的数据注释属性的另一种选择。第三种选择是使用第三方验证库,如 Fluent Validation。