zoukankan      html  css  js  c++  java
  • 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());
            }
        }

    controller 里的 验证就可以去掉了

     public class StudentController : Controller
        {
            //
            // GET: /Student/
            public ActionResult Index()
            {
               
    
                return View();
            }
    
            public JsonResult Create(Student model)
            {
                //if (ModelState.IsValid)
                //{
                //    return Json(new { success = true, message = "成功" });
                //}
                //else {
    
                //    var error = "";
                //    foreach (var key in ModelState.Keys)
                //    {
                //        var state = ModelState[key];
                //        if (state.Errors.Any())
                //        {
                //            error = state.Errors.First().ErrorMessage;
                //            break;
                //        }        
                //    }
    
                //    return Json(new { success = false, message = error });
                //}
                return Json(new { success = true, message = "成功" });
            }
    
            public ActionResult GetStudent(Student model)
            {
                return View();
            }
        }

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

  • 相关阅读:
    UITableview
    UIscrollview
    UITextField(详细设置)
    iOS开发UI篇—Quartz2D使用(矩阵操作)
    iOS开发UI篇—Quartz2D使用(图形上下文栈)
    类的sizeof
    Implement strStr()
    KMP很清楚的一篇解释
    Best Time to Buy and Sell Stock II
    Triangle
  • 原文地址:https://www.cnblogs.com/iampkm/p/9010495.html
Copyright © 2011-2022 走看看