關于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#的語法知道,如果分部類中的分部方法,沒有實現的話,調用和定議的地方都不會起什么作用?,F在,我們要去完善這個方法,讓它“用”起來。
首先,人產在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數據驗證,轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。