2013-05-03 47 views
0

我注册一个网站时,需要为MVC 4.5自定义验证一些建议使用自己的自定义数据注解最小年龄检查自定义验证的MVC 4.5

我确认某人的年龄。

我需要这些作为字段传递给验证程序。

(date) date of birth 
(date)event start date 
(int)min age value 

我在web.config中存储了最小年龄和事件开始日期。所以这可以很容易地定制。 如果用户的年龄不足以检查事件日期,那么他们无法注册。

我该如何去做这件事?我已经检查了一些例子,但似乎无法解决这个问题。

感谢...

回答

2

创建您自己的验证属性是要走的路,很容易实现。要创建一个,你只需要创建一个实现ValidationAttribute

public class MinAgeAttribute : ValidationAttribute 
{ 
    protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
    { 
     // Do some validation checks here 
     var result = new ValidationResult("Sorry you are not old enough"); 

     return result; 
    } 

你重写IsValid方法做你的验证逻辑类,返回ValidationResult

0

您可以通过实现IValidatableObject接口,然后使用验证方法进行自定义的验证。检查“Using IValidatableObject Custom Validation

请注意,IValidatableObject仅支持服务器端验证。在我看来,最好有一个服务器端验证。以防万一您从web服务调用中使用相同的方法。

如果你想定制,然后客户端验证尝试实施IClientValidatable和ValidationAttribute

+0

我希望那些推荐这个的人会指出它不支持客户端验证。它不,这可能是一个巨大的问题。 – 2013-05-03 14:06:44

+0

@MystereMan:我同意它不支持客户端验证。但是,最好有一个服务器端验证。以防万一您从web服务调用中使用相同的方法。如果你想自定义客户端验证,然后尝试实施IClientValidatable – 2013-05-03 14:50:04

+1

@ARS我会说客户端验证只是一个额外的东西,你可以添加。好吧,它会减少流量,因为你不会发送到服务器空表单,但服务器端验证是真正的验证。 – 2013-05-03 14:58:42

0

创建使用ValidationAttribute自己的注释,并装饰以必需的属性。您必须覆盖验证()返回布尔值的方法。并在此基础上,您可以执行您的操作

0

这不是真的有必要仅为年龄验证创建一个自定义属性。您只需创建一个自定义属性,即可根据出生日期计算年龄,然后在最小年龄的年龄属性上添加正常范围验证属性。

但问题是,您正在web.config中设置最小年龄,属性是在编译时创建的,而不是运行时创建的。

我会建议使用Fluent验证,因为您可以创建更好的验证场景。