關(guān)于ASP.NET MVC的驗(yàn)證,用起來(lái)很特別,因?yàn)?/span>MS的封裝,使人理解起來(lái)很費(fèi)解。也可能很多人都在Scott Guthrie等人寫(xiě)的一本《ASP.NET MVC 1.0》書(shū)中,見(jiàn)過(guò)NerdDinner項(xiàng)目中對(duì)Dinner對(duì)象修改和添加的時(shí)的數(shù)據(jù)驗(yàn)證。但有許多封裝的地方,不知道是怎樣的工作原理,今天研究了,拿出來(lái)給大家分享一下。
數(shù)據(jù)庫(kù)還是上一篇blog中的庫(kù)與表,同樣的方法來(lái)創(chuàng)建news表的實(shí)體類,在自動(dòng)生成的news這個(gè)實(shí)體類中,我們發(fā)現(xiàn)有一個(gè)特殊的分部方法:
partial void OnValidate(System.Data.Linq.ChangeAction action);
這個(gè)方法沒(méi)有實(shí)現(xiàn),我們根據(jù)C#的語(yǔ)法知道,如果分部類中的分部方法,沒(méi)有實(shí)現(xiàn)的話,調(diào)用和定議的地方都不會(huì)起什么作用。現(xiàn)在,我們要去完善這個(gè)方法,讓它“用”起來(lái)。
首先,人產(chǎn)在Models中創(chuàng)建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("驗(yàn)證內(nèi)容項(xiàng)出錯(cuò)!");
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("內(nèi)容不能為空!", "內(nèi)容");
20
yield break;
21
}
22
}
23
/**////
24
/// 規(guī)則信息類
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技術(shù):ASP.NET MVC數(shù)據(jù)驗(yàn)證,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。