ASP.NET MVC:使用Enterprise Library验证程序块进行验证对象
2010-01-16 23:52
666 查看
原文链接:http://weblogs.asp.net/gunnarpeipman/archive/2009/11/13/asp-net-mvc-validating-objects-using-enterprise-library-validation-application-block.aspx
在应用程序中数据的验证是一个重要的话题。在进行数据验证的时候有许多令你满意的验证框架。目前我使用Enterprise Library 4.1中的验证程序块并且我把它集成到ASP.NET MVC应用中。在这个案例中我会展示如何在ASP.NET MVC中使用验证程序块。
简介
很快,你可以为你的ASP.NET MVC视图创建和初始化对象。我想你知道知道这个功能,请先知道它的基本工作原理。
下面是我的应用程序如何分层。
目前,所有外部的东西,是被基础层引用。基础层提供了依赖注入和验证的共同接口。当实现改变时这些接口也不会改变。表示层使用基础实现。
添加验证
我需要将Enterprise Library 4.1下载并安装到我的开发机器上。如果你想测试我的解决方案,你也可以创建一个ASP.NET MVC网站应用项目并且将所有东西添加进来。所有东西都没问题。在安装Enterprise Library后你需要添加一些引用让你的程序能使用验证程序块。找到这三个文件:
Microsoft.Practices.EnterpriseLibrary.Common.dll
Microsoft.Practices.EnterpriseLibrary.Validation.dll
Microsoft.Practices.EnterpriseLibrary.Validation.Configuration.Design.dll
这个库就足够了。将这些引用添加到基础库当中。
接下来我们需要为我们的验证功能添加一个虚构的测试。我创建了三个类:
ValidationError – 代表一个验证错误,并包含无效的属性名称和验证消息属性。
ValidationException – 异常的类型,它包含一系列的验证错误(它也可以检测验证代码中造成的错误)。
Validator – 这个类只有一个方法叫做验证<T>的,它使所有操作像正常运行一样。
让我们看看现在这些类。
ValidationError
ValidationException
Validator
现在我们正在接近完成,现在添加一些规则。
添加验证规则
请确保在你的应用程序中有web.config文件,我们将要修改这个文件。从程序菜单中运行Enterprise Library配置程序然后打开web.config文件。
添加一些验证规则类并保存配置。Enterprise Library会自动为你的web.config文件添加所有必需的部分。
让我们看到一个库的方法,接受对象进行验证。假设我们已经保存了库,保存之前验证他们的对象。如果有验证错误ValidationException将被抛出。这里是简化保存库的方法。
而且,我们在ASP.NET MVC控制器中使用这个库(如果您的ASP.NET MVC的版本不支持HttpPost属性您可以使用AcceptVerbs(HttpVerbs.Post)代替)。
你可以看到调用方法叫做BindErrorsToModel()。这是辅助方法,通过一系列的验证错误数组与绑定错误相结合。如果你喜欢,您可以在自己的项目使用这个方法。
注意:请不要忘记,在你的表示层中的字段必须和类中名字命名相同。
现在您可以测试您的应用程序,看看是否进行验证工作。如果代码或配置没有错误,您应该看到正确的错误提示。
结论
虽然这个例子有点长,但不难将验证支持添加到您的应用程序。如果您是第一次将会你花费一些时间,但如果你熟悉的工具,一切会很顺利快速。
在应用程序中数据的验证是一个重要的话题。在进行数据验证的时候有许多令你满意的验证框架。目前我使用Enterprise Library 4.1中的验证程序块并且我把它集成到ASP.NET MVC应用中。在这个案例中我会展示如何在ASP.NET MVC中使用验证程序块。
简介
很快,你可以为你的ASP.NET MVC视图创建和初始化对象。我想你知道知道这个功能,请先知道它的基本工作原理。
下面是我的应用程序如何分层。
目前,所有外部的东西,是被基础层引用。基础层提供了依赖注入和验证的共同接口。当实现改变时这些接口也不会改变。表示层使用基础实现。
添加验证
我需要将Enterprise Library 4.1下载并安装到我的开发机器上。如果你想测试我的解决方案,你也可以创建一个ASP.NET MVC网站应用项目并且将所有东西添加进来。所有东西都没问题。在安装Enterprise Library后你需要添加一些引用让你的程序能使用验证程序块。找到这三个文件:
Microsoft.Practices.EnterpriseLibrary.Common.dll
Microsoft.Practices.EnterpriseLibrary.Validation.dll
Microsoft.Practices.EnterpriseLibrary.Validation.Configuration.Design.dll
这个库就足够了。将这些引用添加到基础库当中。
接下来我们需要为我们的验证功能添加一个虚构的测试。我创建了三个类:
ValidationError – 代表一个验证错误,并包含无效的属性名称和验证消息属性。
ValidationException – 异常的类型,它包含一系列的验证错误(它也可以检测验证代码中造成的错误)。
Validator – 这个类只有一个方法叫做验证<T>的,它使所有操作像正常运行一样。
让我们看看现在这些类。
ValidationError
public class ValidationError { public string PropertyName { get; set; } public string Message { get; set; } }
ValidationException
public class ValidationException : Exception { private readonly ValidationError[] _errors; public ValidationException(ValidationError[] errors) { _errors = errors; } public ValidationError[] ValidationErrors { get { return _errors; } } }
Validator
public static class Validator { public static ValidationError[] Validate<T>(T instance) { var errors = new List<ValidationError>(); var results = Validation.Validate<T>(instance); foreach (var result in results) { var error = new ValidationError(); error.PropertyName = result.Key; error.Message = result.Message; errors.Add(error); } return errors.ToArray(); } }
现在我们正在接近完成,现在添加一些规则。
添加验证规则
请确保在你的应用程序中有web.config文件,我们将要修改这个文件。从程序菜单中运行Enterprise Library配置程序然后打开web.config文件。
添加一些验证规则类并保存配置。Enterprise Library会自动为你的web.config文件添加所有必需的部分。
<h2>Insert</h2> <%= Html.ValidationMessage("_FORM") %> <% using (Html.BeginForm()) {%> <fieldset> <legend>New price enquiry</legend> <table> <tr> <td valign="top"><label for="Title">Title</label>:</td> <td valign="top"> <%= Html.TextBox("Title") %><br /> <%= Html.ValidationMessage("Title")%> </td> </tr> <tr> <td valign="top"> <label for="From">From</label>: </td> <td valign="top"> <%= Html.TextBox("From") %><br /> <%= Html.ValidationMessage("From")%> </td> </tr> <tr> <td valign="top"><label for="DocNumber">Number</label>:</td> <td valign="top"> <%= Html.TextBox("DocNumber") %><br /> <%= Html.ValidationMessage("DocNumber") %> </td> </tr> <tr> <td valign="top"><label for="Date">Date:</label>:</td> <td valign="top"> <%= Html.TextBox("Date", DateTime.Now.ToShortDateString()) %><br /> <%= Html.ValidationMessage("Date") %> </td> </tr> <tr> <td valign="top"> <label for="DueName">Due date:</label>: </td> <td valign="top"> <%= Html.TextBox("DueDate", DateTime.Now.ToShortDateString()) %><br /> <%= Html.ValidationMessage("DueDate") %> </td> </tr> </table> <p> <input type="submit" value="Save" /> </p> </fieldset>
让我们看到一个库的方法,接受对象进行验证。假设我们已经保存了库,保存之前验证他们的对象。如果有验证错误ValidationException将被抛出。这里是简化保存库的方法。
public void SavePriceEnquiry(PriceEnquiry instance) { var results = Validator.Validate<PriceEnquiry>(instance); if (results.Length > 0) throw new ValidationException(results); Save<PriceEnquiry>(instance); }
而且,我们在ASP.NET MVC控制器中使用这个库(如果您的ASP.NET MVC的版本不支持HttpPost属性您可以使用AcceptVerbs(HttpVerbs.Post)代替)。
[HttpPost] public ActionResult Insert(PriceEnquiry enquiry) { try { _repository.SavePriceEnquiry(enquiry); } catch (ValidationException vex) { Helper.BindErrorsToModel(vex.ValidationErrors, ModelState); return Insert(); } catch (Exception ex) { ModelState.AddModelError("_FORM", ex.ToString()); return Insert(); } return RedirectToAction("Index"); }
你可以看到调用方法叫做BindErrorsToModel()。这是辅助方法,通过一系列的验证错误数组与绑定错误相结合。如果你喜欢,您可以在自己的项目使用这个方法。
public static class Helper { public static void BindErrorsToModel(ValidationException exception, ModelStateDictionary modelState) { BindErrorsToModel(exception.ValidationErrors, modelState); } public static void BindErrorsToModel(ValidationError[] errors, ModelStateDictionary modelState) { if (errors == null) return; if (errors.Length == 0) return; foreach (var error in errors) modelState.AddModelError(error.PropertyName, error.Message); } }
注意:请不要忘记,在你的表示层中的字段必须和类中名字命名相同。
现在您可以测试您的应用程序,看看是否进行验证工作。如果代码或配置没有错误,您应该看到正确的错误提示。
结论
虽然这个例子有点长,但不难将验证支持添加到您的应用程序。如果您是第一次将会你花费一些时间,但如果你熟悉的工具,一切会很顺利快速。
相关文章推荐
- ASP.NET MVC 音乐商店 - 6. 使用 DataAnnotations 进行模型验证
- asp.net mvc 3.0详细笔记__17__使用 DataAnnotations 进行模型验证
- Asp.Net MVC 使用 DataAnnotations 进行模型验证
- ASP.NET MVC Music Store教程(6):使用数据注释为模型进行验证
- [小技巧][ASP.Net MVC Hack] 使用 HTTP 报文中的 Header 字段进行身份验证
- ASP.NET MVC 音乐商店 - 6. 使用 DataAnnotations 进行模型验证
- ASP.NET MVC 音乐商店 - 6. 使用 DataAnnotations 进行模型验证
- ASP.NET MVC 音乐商店 - 6. 使用 DataAnnotations 进行模型验证
- 在Asp.Net MVC中实现CompareValues标签对Model中的属性进行验证
- asp.net中使用Page.Validate()和Page.IsValid进行服务器端验证
- Asp.net MVC使用MvcPager进行分页
- 使用实体框架和 ASP.NET MVC 3 进行服务器端分
- 支持ASP.NET MVC、WebFroM的表单验证框架ValidationSuar使用介绍
- 在ASP.NET MVC中使用Unity进行依赖注入的三种方式
- 模型验证组件 FluentValidation 在 ASP.NET MVC 3 下的使用篇
- Asp.net MVC验证那些事(1)-- 介绍和验证规则使用
- asp.net MVC下 使用jquery进行异步提交的两种方式
- asp.net mvc使用validate.js验证 若name属性包含特殊字符则加上双引号即可
- ASP.net MVC使用Jquery-pager和Newtonsoft.Json进行分页
- Asp.net MVC中不使用IFrame 引起的客户端 验证失败的解决办法