2012-03-24 47 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

您将不得不为您的人员重新创建模型,将验证注释添加到该模型中,将服务人员的值从控制器或服务请求深层复制到本地人员,然后获取模型列表您在视图模型中创建的定义,然后使用帮助器与视图模型中的列表来保存您的本地定义的人员的数据注释,并且它将获取正确的验证。