ASP.NET MVC Model验证(一)
ASP.NET MVC Model验证(一)
前言
前面对于Model绑定部分作了大概的介绍,从这章开始就进入Model验证部分了,这个实际上是一个系列的Model的绑定往往都是伴随着验证的。也会在后面的篇幅中讲解MVC框架中Model验证的机制,以及一些Model验证的方式讲解,本章只是一个简单的示例篇幅,对于有基础的朋友可以直接跳过了(不能耽误大家时间)。
Model验证
- Model验证简单运用示例
- ModelValidator使用生成过程
- 自定义实现DefaultModelBinder进行验证
- 自定义ModelValidatorProvider 和ModelValidator
- ValidationAttribute特性类使用
- 自定义ValidationAttribute特性类的示例实现
Model验证简单运用示例
ViewModel的定义
首先看一下ViewModel的定义,Model验证当然离不开Model了,示例代码1-1。
代码1-1
namespace MvcApplication.Models
{
/// <summary>
/// ViewModel-用户注册信息
/// </summary>
public class RegistrationInformation
{
public string ID { get; set; }
public string UserID { get; set; }
public string Password1 { get; set; }
public string Password2 { get; set; }
public string Name { get; set; }
}
}
代码1-1中,定义了RegistrationInformation类型包含着一些注册信息的属性。
配置环境
有了ViewModel过后我们需要数据展示页面,我们定义个ModelValidatorController控制器,并且在其中定义了Index()方法,用于显示页面提供给用户输入注册的信息。示例代码1-2.
代码1-2
namespace MvcApplication.Controllers
{
public class ModelValidatorController : Controller
{
public ActionResult Index()
{
return View(new Models.RegistrationInformation());
}
}
}
然后我们还要定义页面的代码,也就是对应Index()方法的Index视图,示例代码1-4.
代码1-3
@model MvcApplication.Models.RegistrationInformation
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
@using (Html.BeginForm("ModelValidator","ModelValidator"))
{
<p>用户注册ID:@Html.EditorFor(m=>m.ID)</p>
<p>用户名:@Html.EditorFor(m=>m.UserID)</p>
<p>登录密码:@Html.EditorFor(m=>m.Password1)</p>
<p>再次输入域密码:@Html.EditorFor(m=>m.Password2)</p>
<input type="submit" value="提交" />
}
代码1-3中的表单被定义指向了ModelValidatorController控制器的ModelValidator()方法,这里抱歉我没有把命名的定义很好的区分开。
既然代码1-3中指向了ModelValidator()方法,这个时候我们需要修改示例代码1-2中的代码,添加示例代码1-4到示例代码1-2中。
代码1-4
public ActionResult ModelValidator(RegistrationInformation regInfo)
{
if (string.IsNullOrEmpty(regInfo.ID) || regInfo.ID == "")
{
this.ModelState.AddModelError("ID", "请输入ID,ID不能为空!");
}
if (string.IsNullOrEmpty(regInfo.UserID) || regInfo.UserID == "")
{
this.ModelState.AddModelError("UserID", "请输入用户账户,用户账户不能为空!");
}
if (string.IsNullOrEmpty(regInfo.Password1) || regInfo.Password1 == "")
{
this.ModelState.AddModelError("Password1", "请输入登录密码,登录密码不能为空!");
}
if (string.IsNullOrEmpty(regInfo.Password2) || regInfo.Password2 == "")
{
this.ModelState.AddModelError("Pssword2", "请再次输入密码,密码不能为空!");
}
if (!string.IsNullOrEmpty(regInfo.Password2))
{
if (regInfo.Password2 != regInfo.Password1)
{
this.ModelState.AddModelError("Password2", "请重新输入密码,与上次输入密码不同");
}
}
return View(regInfo);
}
在代码1-4中就是对Model进行了验证,可以看到是简单的验证,判断不能为空了、输入的两次密码要相同了。
1-4中是已经进行了Model绑定,系统已经执行到了控制器方法内部了,并且在其内进行的Model验证,而真正的验证是在Model绑定阶段,这部分内容下篇会有讲解。
下面我们再来看一下ModelValidator()方法所对应的视图定义,代码1-5.
代码1-5
@model MvcApplication.Models.RegistrationInformation
@{
ViewBag.Title = "ModelValidator";
}
<h2>ModelValidator</h2>
@Html.ValidationSummary()
<p>用户注册ID:@Html.EditorFor(m => m.ID)</p>
<p>用户名:@Html.EditorFor(m => m.UserID)</p>
<p>登录密码:@Html.EditorFor(m => m.Password1)</p>
<p>再次输入域密码:@Html.EditorFor(m => m.Password2)</p>
在代码1-5中,调用了Html.ValidationSummary()这个方法,这个视图辅助器的作用就是为我们的Model验证所产生的异常信息生成Html代码。
现在我们看一下项目运行效果图1
图1

根据ModelValidator()方法中的验证,我们故意这样输入的,看一下点击“提交”过后显示到ModelValidator页面,图2
图2

有的朋友可能会说这样显示的不符合常理,哪里有提示错误的信息显示在上面的,可以修改的,修改一下代码1-5,示例代码1-6.
代码1-6
@model MvcApplication.Models.RegistrationInformation
@{
ViewBag.Title = "ModelValidator";
}
<h2>ModelValidator</h2> <p>用户注册ID:@Html.EditorFor(m => m.ID)
@Html.ValidationMessageFor(m=>m.ID)
</p>
<p>用户名:@Html.EditorFor(m => m.UserID)
@Html.ValidationMessageFor(m=>m.UserID)</p>
<p>登录密码:@Html.EditorFor(m => m.Password1)
@Html.ValidationMessageFor(m=>m.Password1)
</p>
<p>再次输入域密码:@Html.EditorFor(m => m.Password2)
@Html.ValidationMessageFor(m=>m.Password2)
</p>
修改过后我们还是使用先前使用的测试数据,看下最终的结果图3.
图3

简单的演示就到这里,下一篇为大家讲解Model验证所处在MVC框架中的什么位置以及大概的过程。
作者:金源
出处:http://www.cnblogs.com/jin-yuan/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面
ASP.NET MVC Model验证(一)的更多相关文章
- ASP.NET MVC Model验证(五)
ASP.NET MVC Model验证(五) 前言 上篇主要讲解ModelValidatorProvider 和ModelValidator两种类型的自定义实现, 然而在MVC框架中还给我们提供了其它 ...
- ASP.NET MVC Model验证(四)
ASP.NET MVC Model验证(四) 前言 本篇主要讲解ModelValidatorProvider 和ModelValidator两种类型的自定义实现,前者是Model验证提供程序,而Mod ...
- ASP.NET MVC Model验证(三)
ASP.NET MVC Model验证(三) 前言 上篇中说到在MVC框架中默认的Model验证是在哪里验证的,还讲到DefaultModelBinder类型的内部执行的示意图,让大家可以看到默认的M ...
- ASP.NET MVC Model验证(二)
ASP.NET MVC Model验证(二) 前言 上篇内容演示了一个简单的Model验证示例,然后在文中提及到Model验证在MVC框架中默认所处的位置在哪?本篇就是来解决这个问题的,并且会描述一下 ...
- 详解ASP.NET MVC Model验证
ASP.NET mvc的最好的优点之一就是支持Model验证,这个特性很方便你可以选择在定义Model的时候在字段中采用特性进行注解约定,也可以在代码中自己进行手动验证.下面就来细说一下ASP.NET ...
- 【转】【Asp.Net MVC】asp.net mvc Model验证总结及常用正则表达式
本文属转载,来源: http://www.byywee.com/page/M0/S868/868615.html 关于Model验证官方资料: http://msdn.microsoft.com/zh ...
- 【Asp.Net MVC】asp.net mvc Model验证总结及常用正则表达式
转自:http://www.cnblogs.com/easy5weikai/p/3843131.html 关于Model验证官方资料: http://msdn.microsoft.com/zh-cn/ ...
- asp.net mvc Model验证总结及常用正则表达式【转载】
关于Model验证官方资料: http://msdn.microsoft.com/zh-cn/library/system.componentmodel.dataannotations.aspx AS ...
- ASP.NET MVC Model验证
http://www.wyjexplorer.cn/Post/2012/8/3/model-validation-in-aspnet-mvc3 ASP.NET MVC3中的Model是自验证的,这是通 ...
随机推荐
- 避免重复造轮子的UI自动化测试框架开发
一懒起来就好久没更新文章了,其实懒也还是因为忙,今年上半年的加班赶上了去年一年的加班,加班不息啊,好了吐槽完就写写一直打算继续的自动化开发 目前各种UI测试框架层出不穷,但是万变不离其宗,驱动PC浏览 ...
- 一起来玩echarts系列(一)------箱线图的分析与绘制
一.箱线图 Box-plot 箱线图一般被用作显示数据分散情况.具体是计算一组数据的中位数.25%分位数.75%分位数.上边界.下边界,来将数据从大到小排列,直观展示数据整体的分布情况. 大部分正常数 ...
- SQL数据库之DQL
初来乍到,我是一个Java行业的小学生,刚学半年. 今天老师讲了数据库的操作语句,在这里与大家分享一下我学到的知识吧,要是有不足的地方麻烦大家指出来,共同进步,共同提高! 1.数据库中的各种符号 %: ...
- Consul 服务注册与服务发现
上一篇:Mac OS.Ubuntu 安装及使用 Consul 1. 服务注册 对 Consul 进行服务注册之前,需要先部署一个服务站点,我们可以使用 ASP.NET Core 创建 Web 应用程序 ...
- AFNetworking 3.0 源码解读 总结(干货)(下)
承接上一篇AFNetworking 3.0 源码解读 总结(干货)(上) 21.网络服务类型NSURLRequestNetworkServiceType 示例代码: typedef NS_ENUM(N ...
- C++随笔:.NET CoreCLR之GC探索(4)
今天继续来 带大家讲解CoreCLR之GC,首先我们继续看这个GCSample,这篇文章是上一篇文章的继续,如果有不清楚的,还请翻到我写的上一篇随笔.下面我们继续: // Initialize fre ...
- 自己写的数据交换工具——从Oracle到Elasticsearch
先说说需求的背景,由于业务数据都在Oracle数据库中,想要对它进行数据的分析会非常非常慢,用传统的数据仓库-->数据集市这种方式,集市层表会非常大,查询的时候如果再做一些group的操作,一个 ...
- Log4net - 项目使用的一个简单Demo
参考页面: http://www.yuanjiaocheng.net/entity/entitytypes.html http://www.yuanjiaocheng.net/entity/entit ...
- 电信计费业务:预后融合OCS到底应该实扣还是虚扣?
引入OCS的初衷之一是为了让计费系统能够参与到用户的通讯控制中来,也就是所谓的实时信控.用户在没有余额时,通讯就会被停止,不会造成"天价欠费 ",一方面保障用户的利益,一方面也保障 ...
- 拦截UIViewController的popViewController事件
实现拦截UIViewController的pop操作有两种方式: 自定义实现返回按钮,即设置UIBarButtonItem来实现自定义的返回操作. 创建UINavigatonController的Ca ...