ASP.NET MVC Model验证(一)

时间:2022-09-21 21:43:45

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

ASP.NET MVC Model验证(一)

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

图2

ASP.NET MVC Model验证(一)

有的朋友可能会说这样显示的不符合常理,哪里有提示错误的信息显示在上面的,可以修改的,修改一下代码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

ASP.NET MVC Model验证(一)

简单的演示就到这里,下一篇为大家讲解Model验证所处在MVC框架中的什么位置以及大概的过程。

作者:金源

出处:http://www.cnblogs.com/jin-yuan/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面

ASP.NET MVC Model验证(一)的更多相关文章

  1. ASP&period;NET MVC Model验证&lpar;五&rpar;

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

  2. ASP&period;NET MVC Model验证&lpar;四&rpar;

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

  3. ASP&period;NET MVC Model验证&lpar;三&rpar;

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

  4. ASP&period;NET MVC Model验证&lpar;二&rpar;

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

  5. 详解ASP&period;NET MVC Model验证

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

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

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

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

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

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

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

  9. ASP&period;NET MVC Model验证

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

随机推荐

  1. Java程序员必须掌握的8大排序算法

    分类: 1)插入排序(直接插入排序.希尔排序)2)交换排序(冒泡排序.快速排序)3)选择排序(直接选择排序.堆排序)4)归并排序5)分配排序(基数排序) 所需辅助空间最多:归并排序所需辅助空间最少:堆 ...

  2. 从体系架构上分析PRINCE2和pmp的区别

    一, 目标不同 PMP希望造就一个高效的项目经理,PRINCE2希望做成一个高效的项目. 二, 定位不同 PMP 是框架,PMBOK是指南,是统一化语音,是统一指导项目经理what to do. 而P ...

  3. Mysql:Error Code 1235&comma;This version of MySQL doesn’t yet support &OpenCurlyQuote;LIMIT &amp&semi; IN&sol;ALL&sol;ANY&sol;SOME 错误解决

    This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME 错误解决 这次国庆节回来后的测试中,在一个Mysql表达式 ...

  4. Linux-HAproxy&plus;Keepalived

    HAproxy+++++++++++++Info+++++++++++VIP:192.168.1.222HA-Master IP:192.168.1.117HA-Backup IP:192.168.1 ...

  5. unity打包exe中的资源管理

    给美术和产品用unity做一些exe工具,会频频遇到导入导出资源的情况. 首先所有的文件应该放在StreamingAssets文件夹下, 如果需要动态替换贴图,这样美术只要替换default.png就 ...

  6. 剑指offer 09:变态跳台阶

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. /* f(n-1) = f(n-2) + f(n-3) + ... + f(0 ...

  7. 如何使用VMware安装rhel6&period;4操作系统(详细步骤)

    第一步,打开VMwareWorkStation11创建新的虚拟机.如下图所示. 第二步,点击文件,然后选新建虚拟机.,新建虚拟机向导,选择自定义. 第三步,选择虚拟机硬件兼容性.选择WorkStati ...

  8. Android IOC注解库EasyUI

    EasyUI介绍 1.使用反射机制和注解实现类似于butterknife的IOC框架 2.快速的findViewById和OnClick 3.扩展了click时无网络监测 4.扩展了快速点击监测 使用 ...

  9. nodejs初探一二

    概念 简单来说,node.js 是一个让 JavaScript 运行在服务端的开发平台,让开发者通过JS编写服务端程序. 安装 从nodeJS官网下载对应平台的安装程序,安装完成后,打开命令行工具,然 ...

  10. WPF 的拖拽操作(DragDrop)

    在WPF中似乎没有对拖拽操作进行改变,和以前的方式一样.如果曾近在 Windows 窗体应用程序中使用过鼠标拖放,就会发现在 WPF 中的编程接口实际上没有发生变化.重要的区别是用于拖放操作的方法和事 ...