Мне удалось добавить пользовательские проверки на стороне клиента в ASP MVC, отчасти благодаря этого руководства. Ненавязчивая система хорошо работает, когда вам нужно проверять только один объект за раз.
Теперь мне нужно выполнить проверку типа коллекции, чтобы проверить свойства всей коллекции. Я чувствую, что это должно быть возможно, но не могу найти никакой документации о том, как это сделать. Для начала, какой элемент 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",
};
}
}
With this code, validations happen at the server side no problem but no client-side validation attributes are created at all. Neither are there any error messages.
Я мог бы отказаться от фреймворка DataAnnotations и просто запустить свои собственные проверки Jquery, но DataAnnotations так хорошо работает для меня в других случаях.
Может ли кто-нибудь посоветовать мне? Возможна ли вообще такая проверка с ASP MVC?