当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > ASP.NET MVC 2的客户端验证扩展

ASP.NET
asp.net Execl的添加,更新操作实现代码
asp.net 生成曲线图实现代码
从外部的js文件中获取ASPX页面的控件ClientID
asp.net 因为数据库正在使用的解决方法
asp.net Repeater 自递增
asp.net 实现防迅雷等下载工具盗链
ASP.NET封装的SQL数据库访问类
asp.net 通过指定IP地址得到当前的网络上的主机的域名
aspx 服务器架设问题解决
ASP.NET Session使用详解
Asp.net 5种页面转向方法
ASP.NET 用户多次登录的解决方法
ASP.NET下母版页和内容页中的事件发生顺序整理
asp.net 程序性能优化的七个方面 (c#(或vb.net)程序改进)
从客户端检测到有潜在危险的Request.Form值的asp.net代码
asp.net CommunityServer中的wwwStatus
在应用程序级别之外使用注册为allowDefinition=''MachineToApplication''的节是错误的
.net开发人员常犯的错误分析小结
ASP.net Substitution 页面缓存而部分不缓存的实现方法
asp.net 生成静态时的过滤viewstate的实现方法

ASP.NET MVC 2的客户端验证扩展


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2010-01-04   浏览: 255 ::
收藏到网摘: n/a

ASP.NET MVC 2内置支持在服务器上验证数据注释验证属性,本文介绍如何使用System.ComponentModel.DataAnnotations中的基础类构建自定义验证属性,关于ASP.NET MVC 2中数据注释是如何工作的,请参考Brad的博客(http://bradwilson.typepad.com/blog/2009/04/dataannotations-and-aspnet-mvc.html)。

我会介绍如何连接到ASP.NET MVC 2的客户端验证扩展,以便你可以在客户端上运行JavaScript验证逻辑。

我将创建一个PriceAttribute来验证某个值是否大于指定的价格,并且这个价格必须以99分结束,因此$20.00是无效的值,$19.99是有效的。下面是这个属性的代码:

以下为引用的内容:

  1. public class PriceAttribute : ValidationAttribute {  
  2.   public double MinPrice { getset; }  
  3.       
  4.   public override bool IsValid(object value) {  
  5.     if (value == null) {  
  6.       return true;  
  7.     }  
  8.     var price = (double)value;  
  9.     if (price < MinPrice) {  
  10.       return false;  
  11.     }  
  12.     double cents = price - Math.Truncate(price);  
  13.     if(cents < 0.99 || cents >= 0.995) {  
  14.       return false;  
  15.     }  
  16.          
  17.     return true;  
  18.   }  

注意如果值为空,返回的值是true,这个属性不会验证字段是否需要。我会在RequiredAttribute中验证值是否需要。它允许我将属性放在可选的值上,当用户将这个字段留为空时显示一个错误。

我们可以创建一个视图模型,然后应用这个属性到模型上进行快速测试,下面是这个模型的代码:

以下为引用的内容:

  1. public class ProductViewModel {  
  2.   [Price(MinPrice = 1.99)]  
  3.   public double Price { getset; }  
  4.  
  5.   [Required]  
  6.   public string Title { getset; }  

我们再快速地创建一个视图(Index.aspx)显示和编辑窗体:

以下为引用的内容:

  1. <%@ Page Language="C#" Inherits="ViewPage " %> 
  2.  
  3. <% using (Html.BeginForm()) { %> 
  4.  
  5.   <%= Html.TextBoxFor(m => m.Title) %> 
  6.     <%= Html.ValidationMessageFor(m => m.Title) %> 
  7.   <%= Html.TextBoxFor(m => m.Price) %> 
  8.     <%= Html.ValidationMessageFor(m => m.Price) %> 
  9.       
  10.     <input type="submit" /> 
  11. <% } %> 

现在我们只需要一个有两个行为的控制器,一个编辑视图,另一个接收提交的ProductViewModel。

以下为引用的内容:

  1. [HandleError]  
  2. public class HomeController : Controller {  
  3.   public ActionResult Index() {  
  4.     return View(new ProductViewModel());  
  5.   }  
  6.  
  7.   [HttpPost]  
  8.   public ActionResult Index(ProductViewModel model) {  
  9.     return View(model);  
  10.   }  

我们还没有开启客户端验证,下面来看看当我们查看这个页面并提交一些值时会发生什么。