在用MVC做模型验证时,每个Action里总是充斥着这种代码:
1 public ActionResult Index(UserModel model) 2 { 3 if (!ModelState.IsValid) 4 { 5 //处理验证结果 6 } 7 8 ////处理相关业务,但不需要modelState.IsValid 9 //return null; 10 11 }
写多了总感觉累赘,所以为了偷懒,为了提高效率,用过滤器验证model就可以省点事了。
过滤器代码:
public class ModelValidateAttribute:ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { var modelState = filterContext.Controller.ViewData.ModelState; if (!modelState.IsValid) { var errorMessage = modelState.Values .SelectMany(m => m.Errors) .Select(m => m.ErrorMessage) .First(); //直接响应验证结果 filterContext.Result=new JsonResult() { Data = new {status=-1,msg=errorMessage} }; } base.OnActionExecuting(filterContext); } }
再给Action打上[ModelValidate]标记就可以完成自动验证了。不用过多地再Action写验证代码,这样清爽多了。
当然,如果验证逻辑复杂,这种方式就不适合了,但是可以用它来组合验证。
以上。谢谢大家稀稀拉拉的掌声!