我的模型中有以下属性:
[StringLength(100, ErrorMessage = "Must be less than 100 Chars", MinimumLength = 3)]
public List<KeyValuePair<int, string>> Authors { get; set; }
如何使用 MVC3 中的 DataAnnotation Validation 属性将每个字符串验证到上述列表中?
有可能吗?
我的模型中有以下属性:
[StringLength(100, ErrorMessage = "Must be less than 100 Chars", MinimumLength = 3)]
public List<KeyValuePair<int, string>> Authors { get; set; }
如何使用 MVC3 中的 DataAnnotation Validation 属性将每个字符串验证到上述列表中?
有可能吗?
自定义验证来救援!您需要执行以下操作:
IValidatableObject
接口IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
这是代码
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
了,因为在很多情况下我会根据我的对象的状态进行验证。你的情况有点不同,但从上面的例子可以看出它肯定是可行的。(然而,这一切都在我的脑海中,所以可能并不完美!)