ASP.NET MVC Music Store教程(6):使用数据注释为模型进行验证
2011-11-17 13:42
1091 查看
转自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:
点击“Save”按纽时,不符合验证规则的字段旁会显示验证错误信息。
测试客户端验证
从应用角度来看,服务器端验证是非常重要的,因为用户可能绕过客户端验证。然而只对Web表单进行服务器验证有三个重大问题:
1.在表单提交->服务器端验证->返回到用户浏览器的过程中,用户必须等待。
2.用户正确填写字段并通过验证规则时不能及时得到反馈。
3.我们浪费服务器资源执行验证逻辑,而没有利用用户的浏览器。
很幸运,ASP.NET MVC模板架构内建了客户端验证,不需要任何额外的工作。
在Title字段输入单个字符以满足非空验证,验证会立即消失(证明它是客户端验证)。
在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:
点击“Save”按纽时,不符合验证规则的字段旁会显示验证错误信息。
测试客户端验证
从应用角度来看,服务器端验证是非常重要的,因为用户可能绕过客户端验证。然而只对Web表单进行服务器验证有三个重大问题:
1.在表单提交->服务器端验证->返回到用户浏览器的过程中,用户必须等待。
2.用户正确填写字段并通过验证规则时不能及时得到反馈。
3.我们浪费服务器资源执行验证逻辑,而没有利用用户的浏览器。
很幸运,ASP.NET MVC模板架构内建了客户端验证,不需要任何额外的工作。
在Title字段输入单个字符以满足非空验证,验证会立即消失(证明它是客户端验证)。
相关文章推荐
- 【EntityFramework系列教程三,翻译】在ASP.NET MVC程序中使用EntityFramework对数据进行排序、过滤筛选以及实现分页
- Asp.Net MVC 使用 DataAnnotations 进行模型验证
- ASP.NET MVC 音乐商店 - 6. 使用 DataAnnotations 进行模型验证
- ASP.NET MVC 音乐商店 - 6. 使用 DataAnnotations 进行模型验证
- ASP.NET MVC Music Store教程(3):视图和视图模型
- asp.net mvc 3.0详细笔记__17__使用 DataAnnotations 进行模型验证
- ASP.NET MVC Music Store教程(4):模型和数据访问
- ASP.NET MVC 音乐商店 - 6. 使用 DataAnnotations 进行模型验证
- 【EntityFramework系列教程六,翻译】在ASP.NET MVC程序中使用EntityFramework对相关数据进行更新
- ASP.NET MVC 音乐商店 - 6. 使用 DataAnnotations 进行模型验证
- ASP.NET MVC Music Store教程(7):成员和权限
- ASP.NET MVC结合jQuery插件进行数据验证
- [转载]ASP.NET MVC Music Store教程(1):概述和新项目
- ASP.NET MVC 5 学习教程:通过控制器访问模型的数据
- Asp.net MVC 4 模型的数据注释
- 译文:使用MVC5的Entity Framework 6入门(六)——为ASP.NET MVC应用程序创建更复杂的数据模型
- 【EntityFramework系列教程四,翻译】为ASP.NET MVC程序创建更为复杂的数据模型
- ASP.NET MVC 教程 - 使用实体框架创建模型类(C#)
- Asp.net MVC 4 模型的数据注释
- ASP.NET MVC 结合EDMX 数据模型验证