关于ASP.NET MVC的验证,用起来很特别,因为MS的封装,使人理解起来很费解。也可能很多人都在Scott Guthrie等人写的一本《ASP.NET MVC 1.0》书中,见过NerdDinner项目中对Dinner对象修改和添加的时的数据验证。但有许多封装的地方,不知道是怎样的工作原理,今天研究了,拿出来给大家分享一下。
数据库还是上一篇blog中的库与表,同样的方法来创建news表的实体类,在自动生成的news这个实体类中,我们发现有一个特殊的分部方法:
partial void OnValidate(System.Data.Linq.ChangeAction action);
这个方法没有实现,我们根据C#的语法知道,如果分部类中的分部方法,没有实现的话,调用和定议的地方都不会起什么作用。现在,我们要去完善这个方法,让它“用”起来。
首先,人产在Models中创建news类的另一部分,代码如下:
Code
1 public partial class news
2 {
3 partial void OnValidate(System.Data.Linq.ChangeAction action)
4 {
5 if (!IsValid)
6 {
7 throw new ApplicationException("验证内容项出错!");
8 }
9 }
10 public bool IsValid
11 {
12 get { return (GetRuleViolations().Count() == 0); }
13 }
14 public IEnumerable<RuleViolation> GetRuleViolations()
15 {
16 if (String.IsNullOrEmpty(this.title .Trim () ))
17 yield return new RuleViolation("题目步能为空!", "题目");
18 if (String.IsNullOrEmpty(this.contents .Trim ()))
19 yield return new RuleViolation("内容不能为空!", "内容");
20 yield break;
21 }
22 }
23/**////
24 /// 规则信息类
25 ///
26 public class RuleViolation
27 {
28 public string ErrorMessage { get; private set; }
29 public string PropertyName { get; private set; }
30
31 public RuleViolation(string errorMessage)
32 {
33 ErrorMessage = errorMessage;
34 }
35
36 public RuleViolation(string errorMessage, string propertyName)
37 {
38 ErrorMessage = errorMessage;
39 PropertyName = propertyName;
40 }
41 }
42
NET技术:ASP.NET MVC数据验证,转载需保留来源!
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。