博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET MVC 自动模型验证
阅读量:5998 次
发布时间:2019-06-20

本文共 3407 字,大约阅读时间需要 11 分钟。

经常看到这个代码

在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());                   }    }

 

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:

转载于:https://www.cnblogs.com/iampkm/p/9010495.html

你可能感兴趣的文章
install python3 on centos
查看>>
Python独立环境
查看>>
Git Tutorial 3 - Scenario Extension - revert
查看>>
JavaScript学习笔记(十六)——面向对象编程
查看>>
html5-figure和figcaption元素
查看>>
Your template was not saved as valid UTF-8. 解决方法
查看>>
超级有用的三个原则
查看>>
Python-变量与基础数据类型
查看>>
DDD领域事件与事件总线源码下载
查看>>
郭博绘制的类似modbus的处理机制
查看>>
css平板手机pc媒体查询
查看>>
[信息收集] HCOMP 2010概况及收录论文
查看>>
SQL2008/2005快捷键查询表--ctrl+3
查看>>
swiper4自动轮播切换手动触碰后停止踩坑——属性disableOnInteraction
查看>>
实验5
查看>>
vue2.0-路由配置
查看>>
leetcode — two-sum-ii-input-array-is-sorted
查看>>
---中缀表达式转换为后缀表达式---模拟计算器-----堆栈
查看>>
解决java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileItemFactory
查看>>
Linux计划任务Crontab实例详解教程
查看>>