一  概述

  关于数据验证和数据注解,是任何软件系统不可小觑的必要模块,主要作用是为了保证数据安全性、防止漏洞注入和网络攻击。从数据验证的验证方式来说,我们一般分为客户端验证和服务端验证(或者两种方式相结合),本篇文章主要讲解基于ASP.NET MVC5中的服务端验证,主要包含 数据验证特性 来实现数据验证和数据注解。

  使用的方法:数据验证特性使用起来非常方便,定义好Entity之后,在需要进行校验的地方可以打上相应的Attribute,在Action开始时检查 ModelState的IsValid属性 ,如果校验不通过直接返回View,前端可以解析并显示未通过校验的原因。

二  数据验证

2.1  ASP.NET MVC 内置六大类数据验证特性

  在ASP.NET MVC中,验证特性定义在 System.ComponentModel.DataAnnotations 命名空间中,我们在使用验证特性前,首先需要引入命名空间

  ASP.NET MVC内置了六大验证特性:Required, StringLength, RegularExpression, Range, Compare和 Remote

2.2  一个简单的例子(用于基本数据格式验证)

Models:UserInfo.cs

     public class UserInfo
{
//定义用户名必填
[Required]
public string UserName { get; set; }
//定义密码是必填,且满足6-20位
[Required]
[StringLength(, MinimumLength = , ErrorMessage = "密码必须是6-20位")]
public string UserPass { get; set; }
[Required]
[Compare("UserPass", ErrorMessage = "两次密码不一致")]
public string ConfirmUserPass { get; set; }
//邮箱必填且满足,邮箱格式
[Required]
[RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}", ErrorMessage = "邮箱格式不正确!")]
public string Email { get; set; }
//年龄必填,且满足1~120
[Required]
[Range(, , ErrorMessage = "年龄为1到120岁之间")]
public int Age { get; set; }
}

Model

Controller:DefaultController

     public class UserInfoController : Controller
{
//暂时不用Ioc解耦,直接new一个服务实例
UserInfoService userService = new UserInfoService();
// GET: UserInfo
public ActionResult Index()
{
//GetUserList:获取用户列表的
List<UserInfo> userList = userService.GetUserList();
return View(userList);
}
/// <summary>
/// 添加用户
/// </summary>
/// <returns></returns>
public ActionResult AddUserInfo()
{
return View();
}
[HttpPost]
public ActionResult AddUserInfo(UserInfo user)
{
//使用ModelState.IsValid判断字段格式是否正确
if (ModelState.IsValid)
{
//TryAddUserInfo:添加用户的服务方法,返回值为bool
if (userService.TryAddUserInfo(user))
{
return Json(new { IsSucess = , Message = "添加成功!" });
//return View("Index");前后端不分离时,直接跳转到列表页
}
else
{
return Json(new { IsSucess = , Message = "添加失败" });
}
}
else
{
//字段不符合格式
string error = "";
ViewBag.ModelState = ModelState;
foreach (var item in ModelState)
{
if (item.Value.Errors.Count > )
{
error += item.Value.Errors.FirstOrDefault().ErrorMessage;
}
}
return Json(new { IsSucess=,Message=error});
//return View("AddUserInfo");//一般前后端不分离的项目中这样使用最简单
}
}
}

Controller

View:Index.cshtml

    @model Model.UserInfo
@{
ViewBag.Title = "AddUserInfo";
}
<h2>添加用户</h2>
@using (Html.BeginForm("AddUserInfo", "UserInfo",FormMethod.Post))
{
<div>
@Html.Label("用户名"): @Html.TextBoxFor(m => m.UserName)
@Html.ValidationMessageFor(m => m.UserName)
</div>
<div>
@Html.Label("密码"):@Html.TextBox("UserPass")
@Html.ValidationMessageFor(m => m.UserPass)
</div> <div>
@Html.Label("确认密码"):@Html.TextBox("ConfirmUserPass")
@Html.ValidationMessageFor(m => m.ConfirmUserPass)
</div>
<div>
@Html.Label("邮件"):@Html.TextBox("Email")
@Html.ValidationMessageFor(m => m.Email)
</div>
<div>
@Html.Label("年龄"):@Html.TextBox("Age")
@Html.ValidationMessageFor(m => m.Age)
</div>
<div><input type="submit" value="提交" /></div>
}

View

测试效果如下:

参考文献:

1. https://www.cnblogs.com/eedc/p/6215818.html

2.https://www.cnblogs.com/showstyle/p/3336369.html

.NET MVC中的数据验证的更多相关文章

  1. 【ASP.NET MVC系列】数据验证和注解

    [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作篇)(下) [04]浅谈ASP. ...

  2. ASP.NET MVC中使用窗体验证出现上下文的模型在数据库创建后发生更改,导致调试失败(一)

    在ASP.NET MVC中使用窗体验证.(首先要明白,验证逻辑是应该加在Model.View和Controller哪一个里面?由于Model的责任就是负责信息访问与商业逻辑验证的,所以我们把验证逻辑加 ...

  3. asp.net mvc 中的自定义验证(Custom Validation Attribute)

    前言

  4. WPF中的数据验证

    数据验证 WPF的Binding使得数据能够在数据源和目标之间流通,在数据流通的中间,便能够对数据做一些处理. 数据转换和数据验证便是在数据从源到目标 or 从目标到源 的时候对数据的验证和转换. V ...

  5. 本版本延续MVC中的统一验证机制~续的这篇文章,本篇主要是对验证基类的扩展和改善(转)

    本版本延续MVC中的统一验证机制~续的这篇文章,本篇主要是对验证基类的扩展和改善 namespace Web.Mvc.Extensions { #region 验证基类 /// <summary ...

  6. Java中的数据验证

    原文链接:https://www.cuba-platform.com/blog/2018-10-09/945 翻译:CUBA China CUBA-Platform 官网 : https://www. ...

  7. 在kettle中实现数据验证和检查

    在kettle中实现数据验证和检查 在ETL项目,输入数据通常不能保证一致性.在kettle中有一些步骤能够实现数据验证或检查.验证步骤能够在一些计算的基础上验证行货字段:过滤步骤实现数据过滤:jav ...

  8. MVC中的数据注解和验证

    数据注解和验证 用户输入验证在客户端浏览器中需要执行验证逻辑. 在客户端也需要执行. 注解是一种通用机制, 可以用来向框架注入元数据, 同时, 框架不只驱动元数据的验证, 还可以在生成显示和编辑模型的 ...

  9. ASP.Net MVC中数据库数据导出Excel,供HTTP下载(转)

    转自http://www.cnblogs.com/hipo/archive/2012/03/13/2394019.html 一.关于下载 一般对下载权限有没有限制,或安全性要求不高的情况下,基于web ...

随机推荐

  1. 【转】STM32和ARM的区别

    转自:http://www.cnblogs.com/nuc-boy/archive/2012/09/11/2680157.html 这个问题大概2009年的时候很多人就在问,请看09年的时候大家给出的 ...

  2. The import * cannot be resolved

    背景 使用eclipse jee做练习的时候,下载了老师的项目源码.考虑到老师用的时myeclipse,目录结构略有不同,所有不想直接导入项目,又考虑到,可能环境不一样,会出现这样那样的问题,所以我的 ...

  3. Eclipse布局问题小记

    当Eclipse的Debug,Console(简称工具条)页面被误操作到占据整行时,通过点击工具条的非选项卡部分,然后向代码区域拖动,即可得恢复非单独行模式.

  4. Under the same directory(folder) copy or rename with the different extension name

    @echo offsetlocal EnableDelayedExpansionfor /f "delims=" %%i in ('dir *.vm /q/s/b') do ( c ...

  5. 使用Java HttpComponent/HttpClinet 调用 WebAPI问题的解决

    几个关键字: WebAPI, Android, Apache HttpComponent/HttpClient 问题:无论怎么测试, WebAPI的FormBody value总是空. 最简单的代码 ...

  6. poj3061(尺取法)

    ---恢复内容开始--- 题目意思:给你一段非负序列,再给你一个值k,找出这段序列中最少的连续子序列使得和为k: 解题思路:因为都是正数,我们只需要找到一段区间不大于k,就停止,然后左边趋近看是否能得 ...

  7. 掌上电脑设备可以使用Ubuntu MATE 18.10 Linux映像了

    就在几天前,Ubuntu 18.10发布了.操作系统被称为“Cosmic Cuttlefish”,有多种版本可供选择,除了常见的GNOME -- Xfce (Xbuntu), KDE (Kubuntu ...

  8. BZOJ3453 XLkxc(拉格朗日插值)

    显然f(i)是一个k+2项式,g(x)是f(i)的前缀和,则显然其是k+3项式,插值即可.最后要求的东西大胆猜想是个k+4项式继续插值就做完了.注意2p>maxint…… #include< ...

  9. UVALive5874 - Social Holidaying-二分图匹配/匈牙利算法

    有n个家庭,m个房间,一个房间只能两个家庭住.求最大匹配. 比较标准的二分图问题.先初始化把可能的家庭建边,然后跑一边匈牙利算法. 最后的答案是最大匹配数/2,因为建图时有重复. #include & ...

  10. 架构师成长之路6.4 DNS服务器搭建(部署主从DNS)

    点击返回架构师成长之路 架构师成长之路6.3 DNS服务器搭建(部署主从DNS)  部署主DNS : 点击 部署从DNS : 如下步骤 1.与主DNS一样,安装bind yum -y install ...