ASP.NET MVC5 入门十——添加验证

在本教程:将要在Movie 模型添加验证逻辑确保用户添加或者编辑时数据无误。

DRY(不要重复你自己)

ASP.NET MVC 的核心设计原则之一就是DRY(Don’t Repeat Yourself)。ASP.NET MVC 鼓励你为一个功能或者行为编码一次,在以后需要用到的地方一直复用就可以。这样可以减少编写代码的数量,同时易于维护。

在ASP.NET MVC 和 EF code first 中提供的验证支持就是DRY的好例子。可以只声明一次,然后在任何需要的地方中执行规则。

向Movie模型中添加验证规则

打开 Movies.cs 文件,然后我们来更新Movie类。利用内置的 Required、StringLength、RegularExpression 和 Range Validation 特性添加以下内容:

image

弄完后,我们看看数据库的设计:

image

显然和规格不符,我们来修改它。先生成解决方案,接下来就是利用数据库迁移功能自动生成。命令如下:在软件包管理器控制台输入

  • add-migration DataAnnotations
  • update-database

命令完成时,VS会自动打开一个类文件,我们可以看到其中的Up方法。

public override void Up()
        {
            AlterColumn("dbo.Movies", "Title", c => c.String(maxLength: 60));
            AlterColumn("dbo.Movies", "Genre", c => c.String(nullable: false, maxLength: 30));
            AlterColumn("dbo.Movies", "Rating", c => c.String(maxLength: 5));
        }

Genre 字段不再是可空的,标题和分级都添加了验证条件。我们重新看看数据库的设计:

image

已经改过来了。相关限制条件在源码里面很清楚了,不在细说。

接下来我们看看效果: 进入 localhost:****/Movies/Create

image

 

很明显了,如果没有通过本地客户端的验证,点击Create是不会向服务器提交表单的。

接来下我们看看实现的过程看看在创建视图和创建Action方法时发生了什么

先看看 MoviesController 类中的Create方法:

image

会发现和以前完全一样,没有任何代码上的变化。第一个Create (GET方法)是用来显示初始创建的窗体。第二个(POST版本的)方法先验证是否有错误(ModelStateIsValid)如果存在错误,则重新显示窗体,否则就在数据库中保存新的电影信息。客户端实现校验是通过 javascript 假如我们禁用它看看会发生什么。禁用方法不同浏览器有不同的选项,搜索一下就可以。

禁用 chrome 后,刷新重新输入:

image

没错误提示,我们点击Create

image

很明显,还是有验证,接下来我们输入正确的看看。

image

成功添加进去了,感兴趣的话,在movie.cs 的 POST Create请求添加断点,会发现输入错误的信息,IsValid 是false ,输入正确是True。

如果你添加了断点测试 启用/禁用 JavaScript 2种情况下Create方法的调用会发现,在启用JS的情况下,如果客户端检测到错误是不会调用Action里面POST的Create方法。如果禁用了JS功能,到表单提交到服务器,会通过 ModelState.IsValid 来验证是否数据存在错误。

下一部分:这次改进了 Create 方法的数据验证,下一次就是 Details 和 Delete 方法了。

《ASP.NET MVC5 入门十——添加验证》有2个想法

发表评论

电子邮件地址不会被公开。