ASP.NET MVC 自动模型验证

经常看到这个代码

image

在controller 中写入验证模型,每个需要验证的action 都写….. ,就问你烦不烦~

可以利用 ASP.NET MVC 的 action 拦截机制 自动处理。

1 新建验证模型

添加 using System.ComponentModel.DataAnnotations;  引用

 public class Student
    {
        public int Id { get; set; }
        [Required(ErrorMessage="姓名不能为空")]
        public string Name { get; set; }
        [Range(0,150,ErrorMessage="年龄不合法")]
        public int Age { get; set; }
    }

2  新建一个 action 拦截

ModelValidateAttribute

public class ModelValidateAttribute:ActionFilterAttribute
    {

        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            var viewData = filterContext.Controller.ViewData;
            if (!viewData.ModelState.IsValid)
            {
                var errorMessage = "";
                foreach (var key in viewData.ModelState.Keys)
                {
                    var state = viewData.ModelState[key];
                    if (state.Errors.Any())
                    {
                        errorMessage = state.Errors.First().ErrorMessage;
                        break;
                    }
                }
                // ajax 直接返回错误验证结果
                if (filterContext.RequestContext.HttpContext.Request.IsAjaxRequest())
                {
                    filterContext.Result = new JsonResult
                    {
                        Data = new { success = false, error = errorMessage },
                        JsonRequestBehavior = JsonRequestBehavior.AllowGet
                    };
                }
                else {
                    //filterContext.Result = new ViewResult
                    //{
                    //    ViewData = viewData,
                    //    TempData = filterContext.Controller.TempData
                    //};
                   filterContext.Result = new ContentResult() { Content = errorMessage };

                  //  throw new Exception(string.Format("参数异常:{0}",errorMessage));
                }
            }

            base.OnActionExecuting(filterContext);
        }
       
    }

全局过滤中注册

 public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
            filters.Add(new JsonRequestBehaviorAttribute());
            filters.Add(new ModelValidateAttribute());
        }
    }

参考bolg:http://benfoster.io/blog/automatic-modelstate-validation-in-aspnet-mvc

猜你喜欢

转载自www.cnblogs.com/iampkm/p/9010495.html