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验证(一)的更多相关文章

  1. ASP.NET MVC Model验证(五)

    ASP.NET MVC Model验证(五) 前言 上篇主要讲解ModelValidatorProvider 和ModelValidator两种类型的自定义实现, 然而在MVC框架中还给我们提供了其它 ...

  2. ASP.NET MVC Model验证(四)

    ASP.NET MVC Model验证(四) 前言 本篇主要讲解ModelValidatorProvider 和ModelValidator两种类型的自定义实现,前者是Model验证提供程序,而Mod ...

  3. ASP.NET MVC Model验证(三)

    ASP.NET MVC Model验证(三) 前言 上篇中说到在MVC框架中默认的Model验证是在哪里验证的,还讲到DefaultModelBinder类型的内部执行的示意图,让大家可以看到默认的M ...

  4. ASP.NET MVC Model验证(二)

    ASP.NET MVC Model验证(二) 前言 上篇内容演示了一个简单的Model验证示例,然后在文中提及到Model验证在MVC框架中默认所处的位置在哪?本篇就是来解决这个问题的,并且会描述一下 ...

  5. 详解ASP.NET MVC Model验证

    ASP.NET mvc的最好的优点之一就是支持Model验证,这个特性很方便你可以选择在定义Model的时候在字段中采用特性进行注解约定,也可以在代码中自己进行手动验证.下面就来细说一下ASP.NET ...

  6. 【转】【Asp.Net MVC】asp.net mvc Model验证总结及常用正则表达式

    本文属转载,来源: http://www.byywee.com/page/M0/S868/868615.html 关于Model验证官方资料: http://msdn.microsoft.com/zh ...

  7. 【Asp.Net MVC】asp.net mvc Model验证总结及常用正则表达式

    转自:http://www.cnblogs.com/easy5weikai/p/3843131.html 关于Model验证官方资料: http://msdn.microsoft.com/zh-cn/ ...

  8. asp.net mvc Model验证总结及常用正则表达式【转载】

    关于Model验证官方资料: http://msdn.microsoft.com/zh-cn/library/system.componentmodel.dataannotations.aspx AS ...

  9. ASP.NET MVC Model验证

    http://www.wyjexplorer.cn/Post/2012/8/3/model-validation-in-aspnet-mvc3 ASP.NET MVC3中的Model是自验证的,这是通 ...

随机推荐

  1. MySQL高级知识- MySQL的架构介绍

    [TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...

  2. Javascript生成二维码(QR)

    网络上已经有非常多的二维码编码和解码工具和代码,很多都是服务器端的,也就是说需要一台服务器才能提供二维码的生成.本着对服务器性能的考虑,这种小事情都让服务器去做,感觉对不住服务器,尤其是对于大流量的网 ...

  3. Dapper扩展之~~~Dapper.Contrib

    平台之大势何人能挡? 带着你的Net飞奔吧!http://www.cnblogs.com/dunitian/p/4822808.html#skill 上一篇文章:Dapper逆天入门~强类型,动态类型 ...

  4. Android Studio —— 重装 HAXM

    Android Studio -- 重装 HAXM 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. Android SDK 自带模拟器一直以慢.卡 ...

  5. PHP之用户验证和标签推荐的简单使用

    本篇主要是讲解一些最简单的验证知识 效果图 bookmark_fns.php <?php require_once('output_fns.php'); require_once('db_fns ...

  6. 【NLP】Python NLTK获取文本语料和词汇资源

    Python NLTK 获取文本语料和词汇资源 作者:白宁超 2016年11月7日13:15:24 摘要:NLTK是由宾夕法尼亚大学计算机和信息科学使用python语言实现的一种自然语言工具包,其收集 ...

  7. Python(九) Python 操作 MySQL 之 pysql 与 SQLAchemy

    本文针对 Python 操作 MySQL 主要使用的两种方式讲解: 原生模块 pymsql ORM框架 SQLAchemy 本章内容: pymsql 执行 sql 增\删\改\查 语句 pymsql ...

  8. obj.style.z-index的正确写法

    obj.style.z-index的正确写法 今天发现obj.style.z-index在js里面报错,后来才知道在js里应该把含"-"的字符写成驼峰式,例如obj.style.z ...

  9. spring applicationContext.xml和hibernate.cfg.xml设置

    applicationContext.xml配置 <?xml version="1.0" encoding="UTF-8"?> <beans ...

  10. css样式之border

    border用法详解: 1.border-width 属性设置边框的宽度 可能的值:像素 2.border-style 属性设置边框的样式 可能的值:solid(直线),dashed(虚线),dott ...