ASP.NET MVC- 数据验证机制

  ASP.NET MVC的数据验证机制,比起ASP.NET WEBFORM那种高效很多。下面记录以下两个示例,以便日后方便查阅。

  方式一:在Controller里通过AddModelError方法返回错误的验证信息,看一下代码示例:

  Controller里的,注意看一下,他Add的时候提交是HTTPPOST,并且传参是传一个MODEL进来。

        public ActionResult Add()
        {
            return View();
        }

        [HttpPost]
        public ActionResult Add(Package.Model.Message message)
        {
            if (message.gName == null)
            {
                ModelState.AddModelError("gName", "姓名不能为空");
            }
            if (message.gContent == null)
            {
                ModelState.AddModelError("gContent", "内容不能为空");
            }

            if (ModelState.IsValid)
            {
                MessageDal msgDao = new MessageDal();
                msgDao.Add(message);
                return View();
            }

            return View();

        }

    }

  View里面的

@model  Package.Model.Message
@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Add</title>
</head>
<body>
    <div>
        @using (Html.BeginForm())
        {
            @Html.ValidationSummary(true);
            <fieldset>
                <legend>我要留言</legend>
                <div>
                    留言名称:@Html.TextBoxFor(a => a.gName)
                    @Html.ValidationMessageFor(a => a.gName)
                </div>
                <div>
                    留言内容:@Html.TextBoxFor(a => a.gContent)
                    @Html.ValidationMessageFor(a => a.gContent)
                </div>
                <input type="submit" id="btnAdd" value="提交留言" />
            </fieldset>
        }
    </div>
</body>
</html>

  方式二:直接在MODEL层里添加上验证

  如何把数据验证交给Model呢?这里需要引用一个DLL:System.ComponentModel.DataAnnotations

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Text;

namespace Package.Model
{
    /// <summary>
    /// Message:实体类(属性说明自动提取数据库字段的描述信息)
    /// </summary>

    [Serializable]
    public partial class Message
    {
        public Message()
        { }
        #region Model
        private int _id;
        private string _gname;
        private string _gcontent;

        public int Id
        {
            set { _id = value; }
            get { return _id; }
        }

        [DisplayName("姓名")]
        [Required(AllowEmptyStrings = false, ErrorMessage = "txxx不能为空")]
        public string gName
        {
            set { _gname = value; }
            get { return _gname; }
        }

        [Required(AllowEmptyStrings = false, ErrorMessage = "ddasdasd不能为空")]
        public string gContent
        {
            set { _gcontent = value; }
            get { return _gcontent; }
        }
        #endregion Model

    }
}

  更多在MODEL里验证的丰富示例:

namespace MvcApplication4.Models
{
    public class UserInfo
    {
        //ID编号
        [ScaffoldColumn(false)]
        [Required(AllowEmptyStrings = false, ErrorMessage = "用户ID不能为空")]
        [Display(Name = "记录编号", Order = 20000)]
        public int ID { get; set; }

        [Display(Order = 15000)]
        [Required(AllowEmptyStrings = false, ErrorMessage = "用户名不能为空")]
        [StringLength(20, MinimumLength = 6, ErrorMessage = "用户名不能大于{2} 且要小于{1}")]
        [Remote("User", "Validate", HttpMethod = "post", ErrorMessage = "用户名已经存在")]
        public string UserName { get; set; }

        [Display(Name="password")]
        [DataType(DataType.Password)]
        [Required(AllowEmptyStrings = false, ErrorMessage = "密码不能为空")]
        [StringLength(60, MinimumLength = 20, ErrorMessage = "密码必须在{2} 和{1}之间")]
        public string UserPassword { get; set; }

        [Required(AllowEmptyStrings = false, ErrorMessage = "邮箱必填")]
        [RegularExpression(@"[A-Za-z0-9._%+-][email protected][A-Za-z0-9]+\.[A-Za-z]{2,4}", ErrorMessage = "{0}的格式不正确")]
        public string Email { get; set; }

        [Compare("Email", ErrorMessage = "邮箱要相同")]
        public string TEmail { get; set; }  //compare 大小写要相同 否则不会触发 验证

        [Display(Name = "身份证号码")]
        [RegularExpression(@"\d{17}[\d|x]|\d{15}", ErrorMessage = "身份证号码格式错误")]
        public string IdentityNo { get; set; }

        [Required(AllowEmptyStrings = false, ErrorMessage = "年龄必填")]
        [Range(10, 100, ErrorMessage = "年龄不能大于{2} 不能小于{1}")]
        public int Age { get; set; }

        [ReadOnly(true)]
        [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:c}")]
        [Required(ErrorMessage = "金额不能为空")]
        [Range(typeof(decimal), "20.0", "30.0", ErrorMessage = "金额在{1}和{2}之间")]
        public decimal Money { get; set; }
    }
}

  参考文章:http://www.cnblogs.com/jiagoushi/archive/2013/01/25/2876725.html

时间: 2024-11-03 14:28:39

ASP.NET MVC- 数据验证机制的相关文章

通过扩展改善ASP.NET MVC的验证机制[使用篇]

原文:通过扩展改善ASP.NET MVC的验证机制[使用篇] ASP.NET MVC提供一种基于元数据的验证方式是我们可以将相应的验证特性应用到作为Model实体的类型或者属性/字段上,但是这依然具有很多的不足.在这篇文章中,我结合EntLib的VAB(Validation Application Block)的一些思想通过扩展为ASP.NET MVC提供一种更为完善的验证机制.[源代码从这里下载] 目录: 一.扩展旨在解决怎样的验证问题 二.一个简单的消息维护组件 三.多语言的支持 四.基于某

通过扩展改善ASP.NET MVC的验证机制[实现篇]

原文:通过扩展改善ASP.NET MVC的验证机制[实现篇] 在<使用篇>中我们谈到扩展的验证编程方式,并且演示了本解决方案的三大特性:消息提供机制的分离.多语言的支持和多验证规则的支持,我们现在来看看这样的验证解决方案最终是如何实现的. 目录: 一.为验证创建一个上下文:ValidatorContext 二.通过自定义ActionInvoker在进行操作执行之前初始化上下文 三.为Validator创建基类:ValidatorBaseAttribute 四.通过自定义ModelValidat

(十二)ASP.NET MVC 数据验证

ASP.NET MVC 会自动根据属性的类型进行基本的校验,比如 int 类型的属性,在提交非整数类型的数据的时候就会报错.在 Action 中可以根据 ModelState.IsValid 进行判断是否验证通过,如果没有通过,使用下面的方法可以获取到报错信息: public static string GetValidMsg(ModelStateDictionary modelState) { StringBuilder sb = new StringBuilder(); //遍历所有的属性

【转】ASP.NET MVC 数据验证及相关内容

原文地址:http://www.jb51.net/article/56713.htm 一.数据验证 数据验证的步骤在模型类中添加与验证相关的特性标记在客户端导入与验证相关的js文件和css文件使用与验证相关的Html辅助方法在服务器端判断是否通过服务器端验证常用的验证标记 Required:非空验证StringLength:验证字符串的长度RegularExpression:正则表达式验证Compare:比较两个字段的值是否相等Range:范围验证Remote:服务器验证(需要在controll

MVC 数据验证

前一篇说了MVC数据验证的例子,这次来详细说说各种各样的验证注解.System.ComponentModel.DataAnnotations 一.基础特性 一.Required 必填选项,当提交的表单缺少该值就引发验证错误. 二.StringLength 指定允许的长度 指定最大长度: [StringLength(20)] //最大长度不超过20个字符 指定最短于最长限制: [StringLength(20,MinimumLength=3)] //最大长度不超过20个字符,最短不能低于3个字符

ASP.NET MVC Model验证(一)

ASP.NET MVC Model验证(一) 前言 前面对于Model绑定部分作了大概的介绍,从这章开始就进入Model验证部分了,这个实际上是一个系列的Model的绑定往往都是伴随着验证的.也会在后面的篇幅中讲解MVC框架中Model验证的机制,以及一些Model验证的方式讲解,本章只是一个简单的示例篇幅,对于有基础的朋友可以直接跳过了(不能耽误大家时间). Model验证 Model验证简单运用示例 ModelValidator使用生成过程 自定义实现DefaultModelBinder进行

ASP.NET MVC 5 - 验证编辑方法(Edit method)和编辑视图(Edit view)

原文:ASP.NET MVC 5 - 验证编辑方法(Edit method)和编辑视图(Edit view) 在本节中,您将验证电影控制器生成的编辑方法(Edit action methods)和视图.但是首先将修改点代码,使得发布日期属性(ReleaseDate)看上去更好.打开Models \ Movie.cs文件,并添加高亮行如下所示: using System; using System.ComponentModel.DataAnnotations; using System.Data.

[转]ASP.NET MVC 5 - 验证编辑方法(Edit method)和编辑视图(Edit view)

在本节中,您将验证电影控制器生成的编辑方法(Edit action methods)和视图.但是首先将修改点代码,使得发布日期属性(ReleaseDate)看上去更好.打开Models \ Movie.cs文件,并添加高亮行如下所示: using System; using System.ComponentModel.DataAnnotations; using System.Data.Entity; namespace MvcMovie.Models { public class Movie

ASP.NET MVC局部验证及相关问题

在上一篇“asp.net mvc常用的数据注解和验证以及entity framework数据映射”话题中,有的博友提到 ‘“同一个实体在3-4个地方会发生修改,每个修改需要验证的方式都不一样,后端就不能写固定验证.” 此博友的言论我是很赞同的,在基于asp.net mvc上,我有对应的策略,并且,你只需几行代码,就解决了所有的事情. 还是举上次的Model,如下: [Table("AdminInfo")] public partial class AdminInfo { [Key] [

ASP.NET MVC Model验证(四)

ASP.NET MVC Model验证(四) 前言 本篇主要讲解ModelValidatorProvider 和ModelValidator两种类型的自定义实现,前者是Model验证提供程序,而ModelValidator类型则是Model验证执行类型,在下面的示例中会使用Model验证提供程序结合Model验证执行类型来执行Model验证,就是使用上个篇幅中所讲的实现个Model绑定器继承自DefaultModelBinder类型,在自定义Model绑定器中使用ModelValidator类型