WEB开发网
开发学院WEB开发ASP.NET ASP.NET MVC中对Model进行分步验证的解决方法 阅读

ASP.NET MVC中对Model进行分步验证的解决方法

 2010-10-09 08:16:27 来源:WEB开发网   
核心提示: publicclassInputValidationModelBinder:DefaultModelBinder{protectedoverridevoidOnModelUpdated(ControllerContextcontrollerContext,ModelBindingContextb

  public class InputValidationModelBinder : DefaultModelBinder
  {
    protected override void OnModelUpdated(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
      var modelState = controllerContext.Controller.ViewData.ModelState;
      var valueProvider = controllerContext.Controller.ValueProvider;
      var keysWithNoIncomingValue = modelState.Keys.Where(x => !valueProvider.ContainsPrefix(x));
      foreach (var key in keysWithNoIncomingValue)
        modelState[key].Errors.Clear();
    }
  }

上面是服务端的代码,对于客户端,我们都知道asp.net MVC客户端验证时通过MicrosoftMvcValidation.js去实现的。看下面代码。

 1   validate: function Sys_Mvc_FormContext$validate(eventName) {
 2     var fields = this.fields;
 3     var errors = [];
 4     for (var i = 0; i < fields.length; i++) {
 5       var field = fields[i];
 6       if (!field.elements[0].disabled) {
 7         var thisErrors = field.validate(eventName);
 8         if (thisErrors) {
 9           Array.addRange(errors, thisErrors);
10         }
11       }
12     }
13     if (this.replaceValidationSummary) {
14       this.clearErrors();
15       this.addErrors(errors);
16     }
17     return errors;
18   }
19 }

在第6行代码加入了一句判断:当页面的元素没有被disabled的时候才去验证。

好了这样就实现了一次只对Model中的几个属性字段进行验证。

运行:

asp.net mvc的验证机制只对model中当前页面的属性进行验证:

  查看原图(大图)

填写正确通过验证:

  查看原图(大图)

总结:本文解决了我之前遗留下来的一个问题。实现了在ASP.NET MVC中对Model进行多步验证。希望对你有所帮助,如果你有更好的方法,欢迎给我留言。 

作者:朱祁林

出处:http://zhuqil.cnblogs.com

上一页  1 2 3 4 

Tags:ASP NET MVC

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接