Проверка динамических полей в MVC - PullRequest
3 голосов
/ 29 августа 2011

Моя модель выглядит как

public class Template
{
    Id
    Title
    List<Field> Fields
}

Объект «Поле» содержит информацию, такую ​​как Имя, Заголовок, Тип (TextBox / Выбор / Радио), Параметры и правила проверки (Диапазон, Обязательный, Длина строки).

Стандартная проверка в MVC основана на DataAnnotations, но я хочу проверить (как на стороне клиента, так и на стороне сервера) форму динамически на основе полевых метаданных, которые являются динамическими и настраиваемыми.

Является ли этовозможный?Любые указатели?

PS.Я искал похожие вопросы, но не смог найти надежного ответа.

1 Ответ

4 голосов
/ 29 августа 2011

У меня была похожая ситуация, вот как я ее обработал:

Сторона сервера

Когда произошел POST, я перебрал все значения полей и сделалВалидация на основе правил валидации, которые были у меня на моих объектах.Затем вы можете просто добавить ModelErrors в объект Field.

Поскольку вы перемещаете объект Template в представление, вы можете получить доступ к полям по имени Fields[x].SomeProperty.Убедитесь, что у вас есть ValidationMessageFor для SomeProperty

ModelState.AddModelError("Fields[x].SomeProperty", "The Error Message you want to show.);

Клиентская сторона

Убедитесь, что ваша форма имеет Id, чтобы вы могли получить доступ к методу Validate ().Затем вы перебираете все поля и просто добавляете проверку по своему усмотрению.

Для всех правил проверки проверьте документацию Jquery для проверки.

    $('#frmYourForm').validate();
        for (var i = 0; i < 'CountOfAllFields'; i++)
        {
            $('#Fields_' + i + '__Foo').rules('add', { required: true, messages: { required: 'The Foo field is required'} });
            $('#Fields_' + i + '__Bar').rules('add', { required: true, messages: { required: 'The Bar field is required'} });
        }

Я надеюсь, что помог вам на вашем пути!

Ps, используйте FireBug, чтобы помочь вам найти правильные имена свойств и вот как вы можете связать их с ошибками ModelEstate и т.д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...