0

我的模型中有以下属性:

[StringLength(100, ErrorMessage = "Must be less than 100 Chars", MinimumLength = 3)]
public List<KeyValuePair<int, string>> Authors { get; set; }

如何使用 MVC3 中的 DataAnnotation Validation 属性将每个字符串验证到上述列表中?

有可能吗?

4

1 回答 1

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了,因为在很多情况下我会根据我的对象的状态进行验证。你的情况有点不同,但从上面的例子可以看出它肯定是可行的。(然而,这一切都在我的脑海中,所以可能并不完美!)

于 2012-08-20T09:15:44.667 回答