2012-07-17 16 views

回答

1

自定义验证到救援!你需要做到以下几点:

  1. 落实IValidatableObject接口
  2. 落实IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
  3. 实现你的逻辑,以确定每个字符串少于100个字符

下面的代码

public class YourModel : IValidatableObject 
{ 
    public List<KeyValuePair<int, string>> Authors { get; set; } 

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
    { 
     foreach(KeyValuePair<int, string> myKvp in Authors) 
     { 
      if(myKvp.Value.Length >= 100) 
      { 
       yield return new ValidationResult("Must be less than 100 characters"); 
      } 
     } 
    } 
} 

这样你就可以打电话给if(Model.IsValid)在您的控制器操作中,并返回报告的任何错误。如果您KeyValuePair项指的是一个具体的实体,你甚至可以这样做:

yield return new ValidationResult("Must be less than 100 characters", new string[] { myKvp.Key.ToString() }); 

你需要对其进行定制,以适应属性的ID在页面上。这样,错误消息可能是特定于您的页面上的输入。

我在许多地方覆盖IValidatableObject,因为有很多情况下,我做了验证,这取决于我的对象的状态。你的情况有点不同,但从上面的例子可以看出它确实可行。 (但是,所有这些都不在我的头顶,因此可能不完美!)

相关问题