ASP.NET MVC Music Store教程(6):使用数据注释为模型进行验证-阿里云开发者社区

开发者社区> 杰克.陈> 正文

ASP.NET MVC Music Store教程(6):使用数据注释为模型进行验证

简介: 转自http://firechun.blog.163.com/blog/static/31804522201103133832931/ 在Edit和Create表单中有一个很严重的问题:没有做任何验证。
+关注继续查看

转自http://firechun.blog.163.com/blog/static/31804522201103133832931/

在Edit和Create表单中有一个很严重的问题:没有做任何验证。我们可以试一下让必填字段为空或者在价格字段中输入字母,我们将会看到一个来自数据库的错误。

为应用程序的模型类添加数据注释(Data Annotations)让我们对数据进行验证变得很容易,数据注释可以让我们描述要应用到模型属性上的规则,ASP.NET MVC会强制应用这些规则并显示恰当的消息给用户。

为Album表单添加验证

我们将使用下列数据注释特性:

  • Required——表示该字段为必填字段
  • DisplayName——定义我们要显示在表单字段和验证信息中出现的文本
  • StringLength——为字符串属性定义最大长度
  • Range——为数值字段定义最大值和最小值
  • Bind——列出为模型属性绑定参数或表单数据时,包括或排除的字段
  • ScaffoldColumn ——在编辑器表单中允许隐藏的字段

注意:要获得更多使用数据注释特性为模型验证的信息,访问MSDN文档:http://go.microsoft.com/fwlink/?LinkId=159063

打开Album类并在顶部添加下列命名空间:

using System.ComponentModel; 
 using System.ComponentModel.DataAnnotations; 
 using System.Web.Mvc; 
 为属性添加显示和验证特性,如下所示:

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; } 
    } 
}

在类中添中这些后,Create和Edit界面立即对字段验证,并使用我们定义的显示名称(DisplayName),例如用Album Art URL替换了AlbumArtURL。运行应用程序并浏览/StoreManager/Create:

ASP.NET MVC Music Store教程():使用数据注释为模型进行验证 - firechun - firechun的博客

 点击“Save”按纽时,不符合验证规则的字段旁会显示验证错误信息。

ASP.NET MVC Music Store教程(6):使用数据注释为模型进行验证 - firechun - firechun的博客

 测试客户端验证

从应用角度来看,服务器端验证是非常重要的,因为用户可能绕过客户端验证。然而只对Web表单进行服务器验证有三个重大问题:

  • 1.在表单提交->服务器端验证->返回到用户浏览器的过程中,用户必须等待。
  • 2.用户正确填写字段并通过验证规则时不能及时得到反馈。
  • 3.我们浪费服务器资源执行验证逻辑,而没有利用用户的浏览器。

很幸运,ASP.NET MVC模板架构内建了客户端验证,不需要任何额外的工作。

在Title字段输入单个字符以满足非空验证,验证会立即消失(证明它是客户端验证)。

ASP.NET MVC Music Store教程(6):使用数据注释为模型进行验证 - firechun - firechun的博客
 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Spring Boot 2.x基础教程:使用国产数据库连接池Druid
Spring Boot 2.x基础教程:使用国产数据库连接池Druid
28 0
在医疗保健中使用AI:将数据转化为行动
在医疗保健领域,不乏支持人工智能(AI)好处的统计、调查和行业炒作。人工智能已经在我们的日常生活中发挥了重要作用。医疗保健可能是人工智能对我们日常生活影响最大的领域之一。尽管如此,我们才刚刚开始了解人工智能在医疗服务方面的作用。
229 0
Spring Security笔记:使用数据库进行用户认证(form login using database)
在前一节,学习了如何自定义登录页,但是用户名、密码仍然是配置在xml中的,这样显然太非主流,本节将学习如何把用户名/密码/角色存储在db中,通过db来实现用户认证 一、项目结构 与前面的示例相比,因为要连接db,所以多出了一个spring-database.
871 0
.NET数据库编程求索之路--9.使用EF实现
9.使用EF实现   源码下载: /Files/SummerRain/NetDbDevRoad/9使用EF实现1自动ORM简单三层.rar /Files/SummerRain/NetDbDevRoad/9使用EF实现2自动纯POCO代理简单三层.
651 0
.NET数据库编程求索之路--5.使用ADO.NET实现(三层架构篇-使用List传递数据)(3)
5.使用ADO.NET实现(三层架构篇-使用List传递数据)(2)   作者:夏春涛 xchunta@163.com 转载请注明来源:http://www.cnblogs.com/SummerRain/archive/2012/07/26/2610957.
496 0
.NET数据库编程求索之路--8.使用LinqToSQL实现
8.使用LinqToSQL实现   源码下载:     /Files/SummerRain/NetDbDevRoad/8使用LinqToSql实现1ORM手工简单三层.rar     /Files/SummerRain/NetDbDevRoad/8使用LinqToSql实现2ORM手工工厂模式.
629 0
.NET数据库编程求索之路--7.使用ADO.NET实现(工厂模式-实现多数据库切换)(1)
7.使用ADO.NET实现(工厂模式-实现多数据库切换)(1)     7.1 解决方案框架 解决方案(.sln)包含以下几个项目: (1)类库项目HomeShop.DbUtility,数据访问实用工具; (2)类库项目HomeShop.
744 0
Redis不同数据类型命令使用及应用场景
Redis不同数据类型命令使用及应用场景
2201 0
.NET数据库编程求索之路--7.使用ADO.NET实现(工厂模式-实现多数据库切换)(3)
7.使用ADO.NET实现(工厂模式-实现多数据库切换)(3)   7.5 SQL数据访问层HomeShop.DALOfSql   OrderDAO.cs View Code using System;using System.
669 0
帆软FineReport如何使用程序数据集
大多数情况下,FineReport直接在设计器里使用“数据集查询”,直接写SQL就能满足报表要求,但对于一些复杂的报表,有时候SQL处理并不方便,这时可以把查询结果在应用层做一些预处理后,再传递给报表,即所谓的“程序数据集”,FineReport的帮助文档上给了一个示例: 1 package com.
1511 0
+关注
杰克.陈
一个安静的程序猿~
10427
文章
2
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载