MVC验证 标签

本文导读:ASP.NET MVC3中的Model是自验证的,这是通过.NET4的System.ComponentModel.DataAnnotations命名空间完成的。

我们要做的只是给Model类的各属性加上对应的验证标记(Attributes)就可以让MVC3框架帮我们完成验证。下面介绍MVC中数据验证的相关
知识

一、客户端验证

客户端验证主要是为了提高用户体验,在网页不回刷的情况下完成验证。

1、第一步是要在web.config里启用客户端验证,这在MVC3自带的模板项目中已经有了

<add key="ClientValidationEnabled" value="true"/>

<add key="UnobtrusiveJavaScriptEnabled" value="true"/>

2、然后在被验证的View页面上要加入这样两个JavaScript,注意,他们是依赖于JQuery的

<script src="@Url.Content("~/Scripts/jquery.validate.min。js")" type="text/javascript"></script>

<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min。js")" type="text/javascript"></script>

3、验证消息的显示有两种,一种是ValidationSummary,它可以显示一份验证消息的汇总,包括从后台Action里返回的消息

@Html.ValidationSummary(true, "Login was unsuccessful. Please correct the errors and try again.")

另一种是Model中各属性对应HTML控件的验证消息

@Html.ValidationMessageFor(m => m.UserName)

二、Model中加入 验证标记 进行验证

1、基础特性

(1)、Required
 
必填选项,当提交的表单缺少该值就引发验证错误。

(2)、StringLength
 
指定允许的长度
 
指定最大长度:
 
[StringLength(20)]  //最大长度不超过20个字符

指定最短于最长限制:
 
 [StringLength(20,MinimumLength=3)]  //最大长度不超过20个字符,最短不能低于3个字符

(3)、RegularExpression
 
正则表达式能够匹配的字符串,如果不能匹配,则报一个验证错误
 
[RegularExpression(@"[A-Za-z0-9.%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4}")]

  

(4)、Range
 

Range特性用来指定数值类型值的最小值和最大值。
 
[Range(35,44)]    //整型,最小35,最大44
[Range(typeof(decimal),"0.00","49.99")]    //decimal类型

 

(5)、Remote
 
允许利用服务器端的回调函数执行客户端的验证逻辑。说白了就是支持AJAX验证。
 
这个写个异步验证用户名是否存在的DEMO:

C# 代码   复制

        [Required]
        [Remote("CheckUserName", "Home")]
        public string UserName
        {
            get;
            set;
        }

Controller代码

C# 代码   复制

        public JsonResult CheckUserName(string UserName)
        {
            bool result = true;
            if (UserName == "admin")
            {
                result = false;
            }
            return Json(result,JsonRequestBehavior.AllowGet);
        }

显示结果

(6)、Compare

用于确保模板对象的两个对象拥有相同的值。
 
例如,通常输入密码之后还要求用户再次确认密码,这时候就是Compare属性发挥作用的时候了。
 
[Compare("要对比的属性名")]

2、自定义错误提示消息

每个特性都允许传递一个带有自定义错误提示消息的参数。

C# 代码   复制

        [Required(ErrorMessage="用户名必须填写")]
        [Remote("CheckUserName", "Home",ErrorMessage="此用户名已存在")]
        public string UserName
        {
            get;
            set;
        }

自定义错误消息,还有一个格式项,如

C# 代码   复制

[Required(ErrorMessage="{0}必须填写")]
publit string Name
{
  get;
  set;
}

则{0}在输入的时候会被Name替换
 
如果以上的验证方式还不够,你还可以自定义验证

3、显示和编辑注解

(1)、Display
 
如果使用的是直接EditorForModel实现的话,Display特性可以帮助你设置友好的显示名称
 
例如:
 
[Display(Name="密码")]
public string PassWord { get; set; }

(2)、ScaffoldColumn
 
隐藏Html辅助方法(如EditorForModel,DisplayForModel)显示一些属性。
 
[ScaffoldColumn(false)]        //不显示该属性的编辑框
public string UserName { get; set; }

虽然ScaffoldColumn可以做到不显示一些属性在页面上被编辑,但是如果提交的Form有这个属性值,模型绑定机制依然会绑定此属性值。要解除就要显式的[Bind]了,这个与本篇无关。此处不提。

(3)、DisplayFormat
 
DisplayFormat特性可以用来处理属性的各种格式化选项。当属性包含空值时,可以提供可选的显示文本,也可以为包含标记的属性关闭HTML编码,还可以为运行时指定一个应用于属性值的格式化字符串。
 
例如:
 
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:c}")]
public decimal money { get; set; }

这样,当有初始值的时候,显示的代码将所示:

注意是初始值,如果是直接填写的并不会有符号。来看Controller中设置的初始值:

C# 代码   复制

        public ActionResult PersonAdd()
        {
            Person_Model p = new Person_Model();
            p.money = 12.10M;
            return View(p);
        }

此显示样式在提交回Controller中是没用的,因为模型绑定器将不能解析返回的价格值。怎么用自己斟酌,用于显示还是OK的。

(4)、ReadOnly
 
如果确保默认的模型绑定器不使用请求中的新值更新属性,可以给属性添加ReadOnly特性:
 
[ReadOnly(true)]
public string Name { get; set; }

注意,此属性仍然会显示一个可编辑的文本框来显示Name,但是模型绑定器不会接收其值,因此只有模型绑定器考虑ReadOnly属性。

(5)、DataType
 
DataType特性可以为运行时提供关于属性的特定用途的信息。
 
例如:
 
[DataType(DataType.Password)]
public string PassWord { get; set; }

该属性可以用于指定多选按钮,单选按钮,密码输入框,等等类型的数据。
 
  

(6)、UIHint
 
UIHint特性给Asp.net MVC运行时提供了一个模板名字,以备调用模板辅助方法如(DisplayFor和EditorFor)渲染输出时使用。也可以自定义自己的模板辅助方法来重写Asp.net MVC的默认行为。

(7)、HiddenInput
 
HiddentInput在名称空间System.Web.Mvc中,它可以告知运行时渲染一个type特性值为"hidden"的输入元素。说白了就是<input type="hidden" value="xxx" />

 三、验证示例

1、首先新建一个MVC项目。添加如下代码,代码非常简单:一个Person_Model类

C# 代码   复制

    public class Person_Model
    {
        [Required]
        public int Id { get; set; }

        [Required]
        public string Name { get; set; }

        [Required]
        public int Age { get; set; }
    }

2、Controller类代码

C# 代码   复制

    public class HomeController : Controller
    {
        public ActionResult PersonAdd()
        {
            return View();
        }

        [HttpPost]
        public ActionResult PersonAdd(Person_Model model)
        {
       //一行代码判断验证是否通过
            if (ModelState.IsValid)
            {
                return Redirect("/Home/PersonManager");
            }
            return View();
        }
    }

3、视图代码

C# 代码   复制

@model MvcApplication1.Models.Person_Model
@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout。cshtml";
}
<form action="/Home/PersonAdd" method="post">
  Id:<input type="text" name="Id" value="" />
  @Html.ValidationMessageFor(Model => Model.Id)  //之所以写在Person_Model的验证会显示到前端提示,主要是这种代码起的作用
<br />
  姓名:<input type="text" name="Name" value="" />
  @Html.ValidationMessageFor(Model => Model.Name)
<br />
  年龄:<input type="text" name="Age" value="" />
  @Html.ValidationMessageFor(Model => Model.Age)
<input type="submit" value="确定" />
</form>

4、执行的效果

时间: 2024-10-07 04:50:39

MVC验证 标签的相关文章

ASP.NET MVC验证框架中关于属性标记的通用扩展方法

http://www.cnblogs.com/wlb/archive/2009/12/01/1614209.html 之前写过一篇文章<ASP.NET MVC中的验证>,唯一的遗憾就是在使用Data Annotation Validators方式验证的时候,如果数据库是Entityframework等自动生成的文件,就没有办法使用扩展属性标记进行标记.现在已经开始有了一些其它的Asp.net MVC 验证框架,使用上跟Data Annotation Validators差不太多,但是普遍有这样

MVC 验证

ASP.NET MVC3中的Model是自验证的,这是通过.NET4的System.ComponentModel.DataAnnotations命名空间完成的. 我们要做的只是给Model类的各属性加上对应的验证标记(Attributes)就可以让MVC3框架帮我们完成验证.我以MVC3项目模板自带的登录 做例子讲解Model的验证. 一.启用客户端验证: 客户端验证主要是为了提高用户体验,在网页不回刷的情况下完成验证. 第一步是要在web.config里启用客户端验证,这在MVC3自带的模板项

MVC验证13-2个属性至少输入一项

有时候,我们希望2个属性中,至少有一个是必填,比如: using Car.Test.Portal.Extension; namespace Car.Test.Portal.Models{ public class Person { public int Id { get; set; } public string Telephone { get; set; } public string Address { get; set; } }} .csharpcode, .csharpcode pre

MVC验证01-基础、远程验证

原文:MVC验证01-基础.远程验证 本文体验MVC服务端和客户端验证.主要涉及:※ 基础验证※ 远程验证1个或多个属性及注意点 基础体验 创建MVC4的Internet项目,本身包含了基本的Model,Views,Controller. □ Model打上验证特性 展开 public class RegisterModel { [Required] [StringLength(3, MinimumLength = 2)] //加 [Display(Name = "用户名")] pub

MVC验证03-自定义验证规则、禁止输入某些值

原文:MVC验证03-自定义验证规则.禁止输入某些值 本文继续体验自定义验证规则,需求是禁止输入某些值.本文与前2篇相关,请参考:MVC验证01-基础.远程验证   MVC验证02-自定义验证规则.邮件验证 自定义验证特性继承ValidationAttribute,并实现IClientValidatable接口 展开using System.ComponentModel.DataAnnotations; using System.Web.Mvc; namespace MvcValidation.

MVC验证04-自定义验证规则、日期范围验证

原文:MVC验证04-自定义验证规则.日期范围验证 本文体验范围验证.与本文相关的包括: MVC验证01-基础.远程验证   MVC验证02-自定义验证规则.邮件验证   MVC验证03-自定义验证规则.禁止输入某些值 当需要对字符串长度进行验证,可以用StringLength:[StringLength(100, ErrorMessage = "{0} 必须至少包含 {2} 个字符.", MinimumLength = 6)] 当需要对数组范围进行验证,可以用Range:[Range

&lt;mvc:resources /&gt;标签新老版本解析不同,是bug还是?

先来说说这个坑爹的问题,其实本来我是没注意到的,因为程序跑起来一切都正常.但是在tomcat启动时飞速打印log时,在中间"隐藏"了一个错误: 2015-02-15 16:03:22 [ catalina-exec-4:2202 ] - [ DEBUG ] [org.springframework.beans.TypeConverterDelegate] Original ConversionService attempt failed - ignored since Property

MVC验证06-自定义错误信息

原文:MVC验证06-自定义错误信息 本文体验自定义错误信息.   系统默认的错误信息 在"MVC验证02-自定义验证规则.邮件验证"中,我们自定义了一个验证Email的类.如果输入邮件格式错误,出现系统默认的报错信息. 效果:                   通过ErrorMessage来修改错误信息 [Email(ErrorMessage = "Email格式错误")] [Display(Name = "邮件")] public stri

MVC验证08-jQuery异步验证

原文:MVC验证08-jQuery异步验证 本文主要体验通过jQuery异步验证. 在很多的教材和案例中,MVC验证都是通过提交表单进行的.通过提交表单,可以很容易获得验证出错信息.因为,无论是客户端验证还是服务端验证,总能找到与Model属性或验证特性对应的html元素和属性,并把错误信息显示出来.可是,在实际项目中,经常会遇到需要异步提交的情况.那么,如何把服务端的验证错误信息传递给前端视图呢? □ 思路 1.服务端的验证错误信息是可以收集起来的以json形式传递个视图的.2.服务端把错误信