Успях да добавя персонализирани валидации от страна на клиента в 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?