Проверка коллекций на стороне клиента с помощью 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. Да, СЛ, бу.   -  person granadaCoder    schedule 13.08.2014