ASP.NET MVC5之服务端验证的示例分析
发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,这篇文章将为大家详细讲解有关ASP.NET MVC5之服务端验证的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。使用数据注解API来进行服务端验证。ASP.
千家信息网最后更新 2025年02月23日ASP.NET MVC5之服务端验证的示例分析
这篇文章将为大家详细讲解有关ASP.NET MVC5之服务端验证的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
使用数据注解API来进行服务端验证。ASP.NET MVC 框架在执行的时候,验证所有传递到控制器的数据,如果验证失败就把错误消息,填充到ModelState对象中,并且把这个对象传递给控制器,然后控制器中的方法,根据Modelstate的状态来判断,是否验证失败还是验证通过。
在这里,我将会使用两种方法来验证数据的合法性,一个是手动添加错误消息到ModelState对象中,另外一个方法是使用数据注解【Data Annotation】 API,来做。
先来看看使用手动验证的方式吧:
我们新建一个空白的MVC项目:添加一个Student实体:
using System;using System.Collections.Generic;using System.Linq;using System.Web;namespace Server_Side_Validation_IN_MVC.Models{ public class Student { public string Name { get; set; } public string Email { get; set; } }}
然后添加一个Student控制器:
using Server_Side_Validation_IN_MVC.Models;using System;using System.Collections.Generic;using System.Linq;using System.Text.RegularExpressions;using System.Web;using System.Web.Mvc;namespace Server_Side_Validation_IN_MVC.Controllers{ public class StudentController : Controller { // GET: Student public ActionResult Index() { return View(); } [HttpPost] public ActionResult Index(Student model) { //服务端验证,方法一,手动添加错误消息到ModelState对象中 //如果Name是空的 if (string.IsNullOrEmpty(model.Name)) { ModelState.AddModelError("Name", "Name is required"); } //如果Email是空的 if (string.IsNullOrEmpty(model.Email)) { ModelState.AddModelError("Email", "Email is required"); } else { string emailRegex = @"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" + @"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" + @".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"; Regex re = new Regex(emailRegex); //Email不为空的时候,但格式不合法 if (!re.IsMatch(model.Email)) { ModelState.AddModelError("Email", "Email is not valid"); } } //实体验证通过 if (ModelState.IsValid) { ViewBag.Name = model.Name; ViewBag.Email = model.Email; } return View(model); } }}
创建Index视图:
@model Server_Side_Validation_IN_MVC.Models.Student@{ Layout = null;}Index @using (Html.BeginForm()) { //使用ViewData.ModelState.IsValid来判断ModelState的状态 if (ViewData.ModelState.IsValid) { if (ViewBag.Name != null) { Name:@ViewBag.Name
Email:@ViewBag.Email } } }
然后,修改一下默认的路由:
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Student", action = "Index", id = UrlParameter.Optional } ); }
运行之后,报错。查找了一下原因,修改了一下视图代码:
运行之后,
接着验证一下,Name不为空,Email输入非法格式的数据:
最后验证一下,输入合法的数据:
好了,现在看看第二种方式,使用数据注解来进行服务端验证:
新建一个类:避免混淆,
using System;using System.Collections.Generic;using System.ComponentModel.DataAnnotations;using System.Linq;using System.Web;namespace Server_Side_Validation_IN_MVC.Models{ public class StudentServer { [Required(ErrorMessage="Name为必填项")] public string Name { get; set; } [Required(ErrorMessage="电子邮件必须")] [EmailAddress(ErrorMessage="电子邮件格式不对")] public string Email { get; set; } }}
在控制器中新建两个方法:
public ActionResult SeverSideIndex() { return View(); } [HttpPost] public ActionResult SeverSideIndex(StudentServer model) { if (ModelState.IsValid) { ViewBag.Name = model.Name; ViewBag.Email = model.Email; } return View(); }
对应的视图:
@model Server_Side_Validation_IN_MVC.Models.StudentServer@{ Layout = null;}@if (ViewData.ModelState.IsValid){ if (ViewBag.Name != null) { Name:@ViewBag.Name
Email:@ViewBag.Email }}SeverSideIndex @using (Html.BeginForm()) { @Html.ValidationSummary(true) }
首先验证,都为空的情况:
Name不为空,Email为空
Name不为空,Email输入非法格式数据
两个都输入合法的数据:
好了,以上就是MVC中服务端验证了,我们一般是使用第二种,来进行验证。也就是数据注解。
关于"ASP.NET MVC5之服务端验证的示例分析"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
验证
数据
服务
控制器
方法
消息
错误
控制
对象
格式
注解
输入
合法
手动
篇文章
视图
示例
分析
两个
写法
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
魔兽世界各服务器人数
金蝶数据库查看库龄
达内网络技术老师
搞软件开发的会编程吗
天津互联网软件开发方案
网络安全重要作用
厦门网络技术服务质量
网络安全主持人致词
柳州网络安全监察科科长
最强蜗牛选择服务器
怎么验证数据库约束
ipv6根服务器多大
选择数据库的语句
葫芦岛软件开发项目管理
宁夏信息技术 网络技术教案
人大办公软件开发
深圳宝安北斗产业互联网科技
如何软件开发学习
趣链科技和工业互联网
网络安全最经典的三要素
author 数据库
sqlsugar切换数据库
计算机网络技术三五年的计划
网络安全故障等级
金山区智能网络技术答疑解惑
软件开发公司哪个是龙头
宁波订制app软件开发
黑暗与光明怎么自己建服务器
上海服务器好还是北京
河北工控软件开发哪家便宜