关于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数据验证,转载需保留来源!
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。