2012-03-24 41 views
1

我有一個從web服務獲得的簡單類。自定義驗證列表中的單個項目

public class person 
{ 
    public string name { get; set; } 
    public int number { get; set; } 
} 

而且在我的代碼

public class people 
{ 
    [ValidatePerson] 
    public List<person> myPeople; 
} 

第二類和定製ValidationAttribute

[AttributeUsage(AttributeTargets.Property,AllowMultiple = false)] 
public class ValidatePerson : ValidationAttribute 
{ 
    protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
    { 
    ValidationResult returnValue = ValidationResult.Success; 
    return returnValue; // do stuff later 
    } 
} 

因爲人來自一個web服務,我不能一個裝飾添加到它(我知道)並且將裝飾者添加到人物中的屬性意味着「價值」不是人。

我想驗證的人不List<person>的原因是因爲我在editortemplate的人使用@Html.ValidationMessageFor(model => model);,我想有多個消息,如「這不是一個有效的人」不是頂部,一個塊說「你有三個無效的人」。

回答

0

只需創建要驗證人的新模式,即:

public class personValidator 
{ 
    [ValidatePerson] 
    public string name { get; set; } 
    public int number { get; set; } 
} 

然後將結果複製到web服務的personValidator類,並在視圖中使用它。

+0

我最終創建了公共類'ValidPerson:person {public ValidPerson(person){...}}'並不像我喜歡的那樣乾淨,因爲web服務改變了人的某些東西我需要調整更多的代碼。此外,我還需要人,所以我需要轉換回來。 – Jeff 2012-03-27 00:29:32

0

您將不得不爲您的人員重新創建模型,將驗證註釋添加到該模型中,將服務人員的值從控制器或服務請求深層複製到本地人員,然後獲取模型列表您在視圖模型中創建的定義,然後使用幫助器與視圖模型中的列表來保存您的本地定義的人員的數據註釋,並且它將獲取正確的驗證。