Валидирайте колекции от страна на клиента с DataAnnotations

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


person jforberg    schedule 08.07.2014    source източник
comment
Какво точно се опитвате да потвърдите? Единственото нещо, което наистина има смисъл с една колекция, е да се гарантира, че в нея съществува поне един елемент, но дори и тогава този елемент сам по себе си може да бъде напълно невалиден поради изисквания за свойствата му. Валидирането на свойство на колекция, поне с нещо толкова опростено като анотация на данни, просто няма смисъл, което е до голяма степен причината да не съществува нищо за това извън кутията.   -  person Chris Pratt    schedule 08.07.2014
comment
Да, проверката дали даден списък не е празен е много добър пример. Мога да дам един пример, който според мен има идеален смисъл: Потребителят се представя с квадратчета за отметка. Той трябва да провери поне един от тях. След това, когато сме гарантирали това, ще зависи от елементите да валидират други свойства върху себе си.   -  person jforberg    schedule 09.07.2014
comment
@ChrisPratt Промених въпроса си с по-конкретен пример.   -  person jforberg    schedule 09.07.2014
comment
И аз търся същото. Намерих този URL.... stackoverflow.com/questions/4340205/, но не мога да накарам изскачащите съобщения да се показват на страницата ми в Silverlight. Да, SL, бу.   -  person granadaCoder    schedule 13.08.2014