使用DataAnnotations在客户端验证集合

时间:2014-07-08 13:35:12

标签: asp.net-mvc unobtrusive-validation

我在ASP MVC中成功添加了自定义客户端验证,部分归功于this tutorial。当您只需要一次验证一个对象时,不引人注目的系统就可以正常工作。

现在我需要对集​​合类型执行验证以检查整个集合的属性。我觉得这应该是可能的,但是根本不能找到如何做到这一点的文档。对于初学者,哪个HTML元素负责跟踪数据属性?

示例代码

public class Model {
    [ListNotEmpty]
    public IEnumerable<Submodel> Submodels { get; set; }
}

public class Submodel {
    public bool Selected { get; set; }
}

public class ListNotEmptyAttribute : ValidationAttribute, IClientValidatable {
    public override bool IsValid(object value) {
        return ((IEnumerable<Model>) value).Any(m => m.Selected);
    }

    // FormatErrorMessage() elided

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(
                ModelMetadata metadata, ControllerContext context) {
        yield return new ModelClientValidationRule {
            ErrorMessage = "You must select at least one!",
            ValidationType = "listnotempty",
        };
    }
}

使用此代码,验证在服务器端发生没有问题,但根本没有创建客户端验证属性。也没有任何错误消息。

我可以放弃DataAnnotations框架,只是滚动我自己的Jquery验证,但在其他情况下DataAnnotations对我来说效果很好。

有人可以告诉我吗? ASP MVC是否可以进行这种验证?

0 个答案:

没有答案