在前面的创建专辑与编辑专辑的表单中存在一个问题:我们没有进行任何验证。字段的内容可以不输入,或者在价格的字段中输入一些字符,在执行程序的时候,这些错误会导致数据库保存过程中出现错误,我们将会看到来自数据库的错误信息。

通过为模型类增加数据描述的 DataAnnotations ,我们可以容易地为应用程序增加验证的功能。DataAnnotations  允许我们描述希望应用在模型属性上的验证规则,ASP.NET MVC 将会使用这些 DataAnnotations ,然后将适当的验证信息返回给用户。

为专辑表单增加验证

我们将会使用下列的 DataAnnotations

  • Required 必须 – 表示这个属性是必须提供内容的字段
  • DisplayName 显示名 – 定义表单字段的提示名称
  • StringLength 字符串长度 – 定义字符串类型的属性的最大长度
  • Range 范围 – 为数字类型的属性提供最大值和最小值
  • Bind 绑定 – 列出在将请求参数绑定到模型的时候,包含和不包含的字段
  • ScaffoldColumn 支架列 - 在编辑表单的时候,需要隐藏起来的的字符

注意:更多关于模型验证的信息,请参考:http://msdn.microsoft.com/zh-cn/library/ee256141%28VS.100%29.aspx

打开 Album 类,首先增加下面的 using 语句,这些语句引用了 DataAnnotations  使用的命名空间。

using System.ComponentModel;using System.ComponentModel.DataAnnotations;using System.Web.Mvc;

然后,更新属性,增加显示和验证的 DataAnnotations

namespace MvcMusicStore.Models{    [Bind(Exclude = "AlbumId")]public class Album    {        [ScaffoldColumn(false)]public int AlbumId { get; set; }        [DisplayName("Genre")]public int GenreId { get; set; }        [DisplayName("Artist")]public int ArtistId { get; set; }        [Required(ErrorMessage = "An Album Title is required")]        [StringLength(160)]public string Title { get; set; }        [Required(ErrorMessage = "Price is required")]        [Range(0.01, 100.00,        ErrorMessage = "Price must be between 0.01 and 100.00")]public decimal Price { get; set; }        [DisplayName("Album Art URL")]        [StringLength(1024)]public string AlbumArtUrl { get; set; }public virtual Genre Genre { get; set; }public virtual Artist Artist { get; set; }    }}

然后,将专辑 Album 的属性 Genre 和 Artist 设置为虚拟的 virtual ,这将会使 EF-Code First 使用延迟加载。

public virtual Genre Genre { get; set; }public virtual Artist Artist { get; set; }

为专缉修改完成之后,我们的创建和编辑界面立即就会验证字段,并且使用我们提供的显示名称,例如  AlbumArtUrl 将会成为 Album Art URL 等等。运行程序,浏览 /StoreManager/Create.

下一步,我们特意输入一些破坏验证规则的数据,在价格字段中输入 0, 将标题字段的内容保留为空白,当我们点击创建的时候,我们将会看到表单中不符合验证规则的字段显示了验证的错误提示信息。

测试客户端验证

对于应用程序来说,服务器端验证非常重要,因为用户可能绕过了客户端验证,实际上,Web 页面仅仅实现服务器端验证存在三个显著的问题:

  1. 在提交表单的时候,用户必须等待,验证在服务器端进行,需要将验证的结果发送回浏览器。
  2. 用户不能在输入错误的时候立即得到回应,以便通过验证规则的检查。
  3. 我们把可以在浏览器完成的工作交给了服务器,浪费了服务器的资源。

幸运的是,ASP.NET MVC3 支架模板还提供了内建的客户端验证,不需要我们做额外的工作就可以使用。

在必须输入的标题字段中输入一个字符,验证的错误提示信息立即就消失了。

这里,我们要注意几点:

页面中已经引用了 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>

在 web.config 中,已经默认支持了客户端验证。

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

转载于:https://www.cnblogs.com/uppercloud/p/MVCMusicStore_7.html

ASP.NET MVC 音乐商店 - 6. 使用 DataAnnotations 进行模型验证相关推荐

  1. ASP.NET MVC 音乐商店 - 目录

    这一个系列的内容来自微软的音乐商店 Music Store, 这是项目在 Codeplex 上的地址:http://mvcmusicstore.codeplex.com/. 这个项目使用 ASP.NE ...

  2. ASP.NET MVC 音乐商店 - 9. 注册和结账

    ASP.NET MVC 音乐商店 - 9. 注册和结账 转自http://www.cnblogs.com/haogj/archive/2011/11/20/2255675.html 在这一节,我们将创 ...

  3. ASP.NET MVC 音乐商店 - 8. 使用 Ajax 更新的购物车

    ASP.NET MVC 音乐商店 - 8. 使用 Ajax 更新的购物车 在这个项目中,我们将允许用户在没有注册登录的情况下将专辑加入购物车,但是,在完成结账的时候必须完成注册工作.购物和结账将会被分 ...

  4. ASP.NET MVC 音乐商店 - 10. 完成导航和站点的设计

    ASP.NET MVC 音乐商店 - 10. 完成导航和站点的设计 我们已经完成了网站的大部分工作,但是,还有一些添加到站点的导航功能,主页,以及商店的浏览页面. 创建购物车汇总部分视图 我们希望在整 ...

  5. MVC 音乐商店 第 4 部分: 模型和数据访问

    MVC 音乐商店是介绍,并分步说明了如何使用 ASP.NET MVC 和 Visual Studio 为 web 开发教程应用程序. MVC 音乐商店是一个轻量级的示例存储实现它卖音乐专辑在线,并实现 ...

  6. ASP.NET MVC 音乐商店 - 0 概览

    下载地址:http://mvcmusicstore.codeplex.com/ MVC 音乐店是用来介绍和展示使用 ASP.NETMVC 以及 Visual Studio 进行 Web 开发的示例应用 ...

  7. ASP.NET MVC 音乐商店完整项目示例

    MusicStore 项目的完整配套视频! 这是一个系列文章,原文内容出自微软的 MusicStore. 首先对原文内容进行了简单的翻译,以方便大家参考,另外对于其中的部分内容,也进行了简单的分析,使 ...

  8. ASP.NET MVC 音乐商店 - 2.控制器

    在典型的 Web 应用中,用户请求的 URL 地址通常映射到保存在网站中的文件上,例如,当用户请求 /Products.aspx 的时候,或者 /Products.php 的时候,很可能是在通过处理 ...

  9. ASP.NET MVC 音乐商店 - 1 创建项目

    转载自思胜.net培训高级讲师郝冠军博客http://www.cnblogs.com/haogj/archive/2011/11/08/2241710. 我们的项目从在 Visual Studio 中 ...

最新文章

  1. 使用 window.alert()
  2. 牛客练习赛 60(待补E-长链剖分或者dsu)
  3. Java并发编程--理解ThreadLocal
  4. android builder布局方式,android – AlertDialog.Builder与自定义布局和EditText;无法访问视图...
  5. 贾跃亭的乐视股票要被拍卖了,每股2.51元起拍
  6. 高清简约家居环境场景设计样机模板素材,还原现场!
  7. 基于JAVA+SpringMVC+Mybatis+MYSQL的线上电器商城
  8. 你们的前端是怎么入门的?(并且找到工作)?
  9. lt;SCRIPT src=quot;../scripts/LoadWebOffice.jsquot;gt;lt;/SCRIPTgt;
  10. day31(GIL锁)
  11. 如何创建多个条形图_在R中创建条形图
  12. Hadoop学习笔记(二):MapReduce的进度和状态
  13. matlab中boxplot函数的参数设置_Matlab箱形图boxplot函数用法
  14. 使用 /proc 文件系统来控制系统
  15. 数据治理之数据发现-元数据-DataHub
  16. 利用matlab求解常数e,利用matlab软件求解常数e和欧拉常数γ.docx
  17. 全网的 IP 归属地显示,带你5分钟加上,就是这么简单
  18. struts2 国际化 中文乱码英文不乱码问题
  19. TensorBoard引起的AttributeError: ‘Sequential‘ object has no attribute ‘run_eagerly‘问题
  20. 古典音乐CD购买经验谈

热门文章

  1. eclipse编辑jsp文件和javascript代码很卡解决办法
  2. 【写给朱大虫的教程】【Ruby on Rails】【006】遵循Rails理念的快速实现
  3. 51.com庞升东:其实我认为自己比较像唐僧
  4. 编程算法 - 将排序数组按绝对值大小排序 代码(java)
  5. 从钱龙数据中读取股票权息信息导入到数据库
  6. asp.net的MessageBox
  7. python object类
  8. 基于Linux的 Open×××网络之网络架构应用实例
  9. eq相等,smarty 比较操作符!时间戳
  10. wordpress在新窗口打开留言者链接