自定义验证列表中的单个项目

时间:2012-03-24 00:59:55

标签: c# asp.net-mvc-3 razor

我有一个简单的课程,我从网络服务中获得。

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
   }
}

因为人来自网络服务我不能添加装饰器(我知道)并且将装饰器添加到人的属性意味着“值”是List<person>而不是人。

我想验证不是List<person>的人的原因是因为我在人物的editortemplate中使用@Html.ValidationMessageFor(model => model);,我想要有多条消息,例如“这不是一个有效的人”顶部不是一块说“你有3个无效的人”。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

只需为您要验证的人创建一个新模型,即:

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

然后将webservice的结果复制到personValidator类,并在View中使用它。