• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > ASP.NET MVC4入门教程(八):给数据模型添加校验器

ASP.NET MVC4入门教程(八):给数据模型添加校验器

作者:葡萄城控件技术团队 字体:[增加 减小] 来源:互联网 时间:2017-05-11

葡萄城控件技术团队通过本文主要向大家介绍了精通asp.net mvc4,精通asp.net mvc4 pdf,asp net mvc4教程,asp net mvc4,asp net mvc4高级编程等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

在本节中将会给Movie模型添加验证逻辑。并且确保这些验证规则在用户创建或编辑电影时被执行。

保持事情 DRY

ASP.NET MVC 的核心设计信条之一是DRY: "不要重复自己(Don't Repeat Yourself)"。ASP.NET MVC鼓励您指定功能或者行为,只做一次,然后将它应用到应用程序的各个地方。这可以减少您需要编写的代码量,并减少代码出错率,易于代码维护。

给ASP.NET MVC 和 Entity Framework Code First 提供验证支持是 DRY 信条的一次伟大实践。您可以在一个地方 (模型类) 中以声明的方式指定验证规则,这个规则会在应用程序中的任何地方执行。

让我们看看您如何在本电影应用程序中,使用此验证支持。

给电影模型添加验证规则

您将首先向Movie类添加一些验证逻辑。

打开Movie.cs文件。在文件的顶部添加using语句,从而引用System.ComponentModel.DataAnnotations命名空间:

using System.ComponentModel.DataAnnotations;

注意,该命名空间不包含System.Web。DataAnnotations 提供了一组内置的验证特性,您可以以声明的方式,应用于任何类或属性。

更新Movie类,以利用内置的Required、 StringLength和Range验证属性。以下面的代码为例,以应用验证属性。

public class Movie {
  public int ID { get; set; }

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

  [DataType(DataType.Date)]
  public DateTime ReleaseDate { get; set; }

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

  [Range(1, 100)]
  [DataType(DataType.Currency)]
  public decimal Price { get; set; }

  [StringLength(5)]
  public string Rating { get; set; }
}
</div>

运行该应用程序,您会再次得到了以下的运行时错误:

The model backing the 'MovieDBContext' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269).

我们将使用Migrations来更新 Schema。生成解决方案,然后打开软件包管理器控制台窗口,并输入以下命令:

add-migration AddDataAnnotationsMig
update-database

当此命令完后,Visual Studio会打开指定名称 (AddDataAnnotationsMig)的文件,其中定义了派生自DbMIgration的新类,并在Up方法中,您可以看到代码更新的Schema 和约束条件。Title 和Genre 字段不再可以为 null (即,您必须输入一个值) 并且Rating 字段具有最大长度是 5。

验证属性将指定一个验证行为,这样您可以指定模型中的那个属性需要被强制验证。Required属性指示该属性必须有一个值 ,在此示例中,一部电影必须要有Title、 ReleaseDate、Genre和Price属性的值,这样才有效。Range属性限制了一个指定范围内的值。StringLength属性允许您设置一个字符串属性的最大长度和其最小长度(可选)。内部类型 (例如decimal, int, float, DateTime)默认是必须的,所以不需要Required 属性。

Code First 确保您在模型类上所指定的验证规则,会在应用程序修改数据库之前执行。例如,下面的代码在调用SaveChanges方法时,将引发异常,因为缺失几个必需的Movie属性值,并且价格为零 (这在有效范围之外)。

MovieDBContext db = new MovieDBContext();

Movie movie = new Movie();
movie.Title = "Gone with the Wind";
movie.Price = 0.0M;

db.Movies.Add(movie); 
db.SaveChanges();    // <= Will throw server side validation exception 
</div>

验证规则会自动被 .NET Framework执行,这将有助于使您的应用程序更加的可靠。它还确保你不会因为忘了验证,无意中使得坏的数据也写入到了数据库。

下面是更新后的Movie.cs文件的完整代码清单:

using System;
using System.Data.Entity;
using System.ComponentModel.DataAnnotations;

namespace MvcMovie.Models {
  public class Movie {
    public int ID { get; set; }

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

    [DataType(DataType.Date)]
    public DateTime ReleaseDate { get; set; }

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

    [Range(1, 100)]
    [DataType(DataType.Currency)]
    public decimal Price { get; set; }

    [StringLength(5)]
    public string Rating { get; set; }
  }

  public class MovieDBContext : DbContext {
    public DbSet<Movie> Movies { get; set; }
  }
}
</div>

ASP.NET MVC 的验证错误UI

重新运行应用程序,浏览 /Movies的 URL。

单击Create New链接,来添加一部新电影。在窗体中填写一些无效值,然后单击Create按钮。

注意,为了使jQuery支持使用逗号的非英语区域的验证 ,需要设置逗号(",")来表示小数点,你需要引入globalize.js并且你还需要具体的指定cultures/globalize.cultures.js文件 (地址在https://github.com/jquery/globalize) 在 JavaScript 中可以使用 Globalize.parseFloat。下面的代码展示了在"FR-FR" Culture下的Views\Movies\Edit.cshtml 视图:

@section Scripts {
  @Scripts.Render("~/bundles/jqueryval")
  <script src="~/Scripts/globalize.js"></script>
  <script src="~/Scripts/globalize.culture.fr-FR.js"></script>
  <script>
    $.validator.methods.number = function (value, element) {
      return this.optional(element) ||
        !isNaN(Globalize.parseFloat(value));
    }
    $(document).ready(function () {
      Globalize.culture('fr-FR');
    });
  </script>
  <script>
    jQuery.extend(jQuery.validator.methods, {  
      range: function (value, element, param) {    
        //Use the Globalization plugin to parse the value    
        var val = $.global.parseFloat(value);
        return this.optional(element) || (
          val >= param[0] && val <= param[1]);
      }
    });

  </script>
}
</div>

为了使用这种用户验证界面,真正的好处是,您不需要修改MoviesController类或Create.cshtml视图中的任何一行代码。在本教程之前所生成的控制器和视图中,Movie模型类的属性上所指定的验证规则一样可以自动适用。

您可能已经注意到了Title 和Genre属性,在字段中输入文本或者删除文本,是不会执行所需的验证属性的,直到您提交表单 (点Create按钮)时才执行。对于字段是最初为空 (如创建视图中的字段) 和只有Required属性并没有其它验证属性的字段,您可以执行以下操作来触发验证:

1. Tab into the field.

2. Enter some text.

3. Tab out.

4. Tab back into the field.

5. Remove the text.

6. Tab out.

上面的顺序将触发必需的验证,而并不需要点击提交按钮。在不输入任何字段的情况下,直接点击提交按钮,将触发客户端验证。直到没有客户端验证错误的情况下,表单数据才会发送到服务器。您可以在服务器端HTTP Post 方法上加上断点来测试一下,或者使用Fiddler tool或 IE 9 F12 Developer tools.

如何验证创建视图和创建方法

您可能很想知道验证用户界面在没有更新控制器或视图代码的情况下是如何生成的。下面列出了MovieController类中的Create方法。它们是之前

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • ASP.NET MVC4 利用uploadify.js多文件上传
  • ASP.NET mvc4中的过滤器的使用
  • asp.net Mvc4 使用ajax结合分页插件实现无刷新分页
  • [Asp.Net MVC4]验证用户登录实现实例
  • asp.net mvc4 mysql制作简单分页组件(部分视图)
  • asp.net mvc4中bootstrap datetimepicker控件的使用
  • asp.net mvc4 mysql制作简单分页组件(部分视图)
  • asp.net mvc4中bootstrap datetimepicker控件的使用
  • ASP.NET MVC4入门教程(九):查询详细信息和删除记录
  • ASP.NET MVC4入门教程(八):给数据模型添加校验器

相关文章

  • 2017-05-11ASP.NET技巧:为Blog打造个性日历
  • 2017-05-11ASP.NET中配合JS实现页面计时(定时)自动跳转
  • 2017-05-11解析如何利用一个ASP.NET Core应用来发布静态文件
  • 2018-08-20asp.net mvc CodeFirst模式数据库迁移步骤详解
  • 2017-05-11关于C#中DateTime常用方法概述
  • 2017-05-11asp.net下 jquery jason 高效传输数据
  • 2017-05-11ASP.NET 防止按钮多次提交核心实现代码
  • 2017-05-11Discuz!nt 源文件变成乱码的解决方法
  • 2017-05-11ASP.NET中Cookie的用法实例分析
  • 2017-05-11解读ASP.NET 5 & MVC6系列教程(15):MvcOptions配置

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 一步步打造漂亮的新闻列表(无刷新分页、内容预览)第一步
    • 防止在服务器处理完成之前用户多次点击提交按钮处理代码
    • C#实现HTTP协议迷你服务器(两种方法)
    • asp.net运算符之逻辑运算符以及其他运算符介绍与实例
    • c#将Excel数据导入到数据库的实现代码
    • 模拟HTTP请求实现网页自动操作及数据采集的方法
    • asp.net生成静态页并分页+ubb第1/2页
    • Discuz!nt 源文件变成乱码的解决方法
    • 理解HttpHandler,并为所有*.jpg图片生成一段文字于图片上
    • C#中的委托和事件学习(续)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有