MVC 模型验证

  ASP.NET MVC框架提供了数据验证的API,称为"模型数据注解"或“模型元数据”,使我们可以使用声明语法在模型中指定验证的规则,常见的验证API如下:

验证API
数据验证API 示例 说明
Compare [Compare("MyOtherProperty")] 两个属性值必须相同
Range [Range(10,20)] 属性值必须在指定的数据范围之内
RegularExpression [RegularExpression("patttern")] 属性值必须匹配正则表达式
Required [Required] 属性值必须非空或不能只是空格
StringLength [StringLength(10)] 属性值长度不能超过给定的最大长度

  数据验证API位于using System.ComponentModel.DataAnnotations;命名空间。

  Movie.cs

    using System.ComponentModel.DataAnnotations;
    //引用命名空间

    //影片信息类
    public class Movie
    {
        //影片名称
        [Display(Name = "影片名称")]
        [Required(ErrorMessage = "“{0}”必须填写")]
        public string Title { get; set; }

        //上映时间
        [Display(Name = "上映时间")]
        [Required(ErrorMessage = "“{0}”必须填写")]
        [DataType(DataType.Date)]
        public DateTime ReleaseDate { get; set; }

        //光盘售价
        [Display(Name = "光盘售价")]
        [Required(ErrorMessage = "“{0}”必须填写")]
        [Range(typeof(decimal),"1","100",ErrorMessage = "“{0}”不在1-100以内")]
        //[DataType(DataType.Currency)]
        public decimal Price { get; set; }

        //评分
        [Display(Name = "评分")]
        //[Required(ErrorMessage = "“{0}”必须填写")]
        //[StringLength(10, ErrorMessage = "“{0}”的长度不能超过10")]
        [RegularExpression(@"^[0-9]*[1-9][0-9]*$", ErrorMessage = "“{0}”的长度不能超过2")]
        public string Rating { get; set; }
    }

  Index.cshtml

<body>
    <h1>添加电影信息</h1>
    @using (Html.BeginForm())
    {
        <p>影片名称:@Html.TextBox("Title")</p>
        <p>上映时间:@Html.TextBox("ReleaseDate")</p>
        <p>光盘价格:@Html.TextBox("Price")</p>
        <p>影片评分:@Html.TextBox("Rating")</p>
        <input type="submit" id="submit" value="提交" />
        @Html.ValidationSummary()
        <p>@ViewBag.Info</p>
    }
</body>

  HomeController.cs

   public class HomeController : Controller
    {
        //GET访问 /Home/Index
        public ActionResult Index()
        {
            return View();
        }

        //模型绑定
        //Post访问 /Home/Index
        [HttpPost]
        public ActionResult Index(Movie m)
        {
            if (ModelState.IsValid)
            {
                ViewBag.Info = "电影" + m.Title + "  ,上映时间" + m.ReleaseDate + "  ,评分" + m.Rating + "  ,价格" + m.Price;
            }
            return View();
        }
    }

  运行效果图:

    

   解释:

    在模型对象Movie类中,使用“数据注释”的方式设定了每个属性的验证行为。

    在视图中,我们使用HTML辅助方法创建表单。同时,Html.ValidationSummary方法可以再页面上集中显示验证提示。

    在HomeController,创建了两个版本的Index操作方法,无参数的Index用于显示页面,带参数的Index负责处理Post请求。ModelState.IsValid属性检查模型对象每个属性的验证规则,如果验证通过,则ModelState.IsValid返回True,否则返回False。

   提醒:

    如果需要实现JavaScript客户端验证,我们可以使用JQuery Validate验证插件。我们知道如果视图实现了客户端验证,一旦检测输入错误,页面被禁止提交,表单不会发送到服务端,HTTP POST版本的Index方法将不会被调用。但是客户端验证不能替代服务端验证,如果浏览器禁用JavaScript或发生网络攻击,客户端验证将完全失去作用,此时服务端的模型验证不了或缺,ModelState.IsValid方法将担当审查的重任,决定验证是否验证通过。

    

原文地址:https://www.cnblogs.com/liuchenxing/p/8418053.html

时间: 2024-10-03 08:53:43

MVC 模型验证的相关文章

MVC模型验证:属性值无require,页面仍然验证问题

为了更清晰的说明这个问题,我使用了VS2013自动生成的MVC示例来演示,运行示例项目,点击注册页面,如图: 接下来给上面的注册增加一个“年龄条件”,找到RegisterModel,添加一个”Age”属性,但是,不加”[require]”,如图: 运行项目,回到注册页面,用户名,密码,确认密码都填,年龄项不填,点击注册,如图: 我们发现它提示 “年龄字段是必须的”,但是我并没有在 Age属性上加require属性,它怎么还会验证呢? 起初我还以为页面缓存原因,清空缓存,问题仍然存在. 于是Goo

当ASP.NET MVC模型验证遇上CKEditor

项目需要,使用到了CKEditor编辑器.这是个很不错的富文本编辑器,但是当它绑定的字段需要进行模型验证的时候,却会出现验证失效的问题.因此本文旨在记录这个问题和给出解决办法.以下以ValidationAttribute和jQuery Validate2中验证方式为例.测试项目包含3个页面:Index.cshtml(包含2个部分视图).Add.cshtml(添加页).Companies(列表页,仅为展示数据):一个模型(Company).项目功能截图如下: -------------------

MVC模型验证

一.在动作方法中执行验证Controller中使用ModelState.AddModelError()方法在验证中根据条件输出错误信息.如: ModelState.AddModelError("UserName", "用户名不能为空");需要注意的是,这句生成的是属性级错误,因为AddModelError的第一个参数指定的是被验证的属性名:如果要改成模型级错误,则保持第一个参数为空,如:ModelState.AddModelError("", &

asp.net mvc 模型验证组件——FluentValidation

示例 1 using FluentValidation; 2 public class CustomerValidator: AbstractValidator<Customer> { 3 public CustomerValidator() { 4 RuleFor(customer => customer.Surname).NotEmpty(); 5 RuleFor(customer => customer.Forename).NotEmpty().WithMessage(&qu

ASP.NET MVC 4 (十) 模型验证

模型验证是在模型绑定时检查从HTTP请求接收的数据是否合规以保证数据的有效性,在收到无效数据时给出提示帮助用户纠正错误的数据. 显式模型验证 验证数据最直接的方式就是在action方法中对接收的数据验证,以下面的Model为例: public class Appointment { public string ClientName { get; set; } public DateTime Date { get; set; } public bool TermsAccepted { get; s

.Net高级进阶,WebApi和MVC进行模型验证的时候,教你如何自由控制需要进行验证的字段?

现在,你有一个MVC架构的web项目,你要完成一个注册功能. 前台传了3个值到你的控制器,分别是账号.密码.邮箱. 如图:现在你要在控制器里面判断,账号名称.密码.邮箱不能为空,并且名称和密码不超过16位. 上面这个图只是个理想中的小例子,实际开发情况是,可能一次性要传十几个字段甚至更多. 那么在实际开发中,通常为了复用性,我们将这3个参数用一个实体类来代替. 即如下所示. 注:这一步会有个知识点,叫做模型验证,不懂的童鞋可以百度下,MVC会通过一定规则自动直接将参数反序列化成所对应的实体类,但

ASP.NET MVC学习之模型验证篇

一.学习前的一句话 在这里要先感谢那些能够点开我随笔的博友们.慢慢的已经在博客园中度过一年半了,伊始只是将博客园作为自己学习的记录本一样使用,也不敢将自己的随笔发表到博客园首页,生怕自己的技艺不高,反倒成了笑话.但是随着时间的推移,再也按捺不住这种想法,于是就写了一篇随笔发表到博客园首页.让我意想不到的是有许多人都看了,而且也留下了评论.这让我鼓起勇气写了第二.三.四篇.到现在的连载,这里我希望那些从未发表过随笔的人可以尝试去发表,在这里他人不会嘲讽你,而是会给你更好的建议.说了这么多下面我们继

MVC的验证(模型注解和非侵入式脚本的结合使用)

@HtmlHrlper方式创建的标签,会自动生成一些属性,其中一些属性就是关于验证 如图示例: 模型注解 通过模型注解后,MVC的验证,包括前台客户端,后台服务器的验证,MVC统统都做了包含,即使用户在客户端禁用Javascript,服务器也会将非法操作进行验证,当前前提是针对Model实体标识了注解的情况. 要能够正常进行非空等合法性验证必须做如下步骤(前提条件): 1.必须在实体的每个类型上加上Required特性,但是数字型的属性默认已经加上了. 2.必须在视图上导入如下脚本: <scri

爱上MVC~MVC4模型验证可以放在前端

回到目录 MVC4.0推出后,在模型验证上有了一个新的改近,它支持前端验证,即在用户POST之前,如果验证失败,则Action(POST方式的)不会被执行,而直接停留在原视图,这对于用户体验是好的,它就类似于ajax验证一样,不会将原页重定向. MVC4.0在view中引用了jqueryval文件后,即可实现客户端实时验证 @section Scripts { @Scripts.Render("~/bundles/jqueryval") } 如果你不需要走JS方式验证,还是使用原来的P