Как вы проверяете, только если есть вход? - PullRequest
0 голосов
/ 13 сентября 2011

Используя Asp.Net MVC3, у меня есть много шагов в мастере, где после каждого шага я делаю $ .post, чтобы захватить то, что было введено. Первые два шага просты и все поля обязательны для заполнения.

Остальные шаги не обязательны. Однако, если на шаге 3 имеется 10 полей ввода и введены значения для 5 из 10, то должны включаться проверки (только для 5 полей и отображать ошибки только для этих 5). В сущности, такие вещи, как [Required], [StringLength] и [RegEx], должны срабатывать только в том случае, если кто-то действительно что-то вводил для этих 5 полей. Если ничего не введено, проверки должны быть пропущены.

Я думал о присвоении имени или префикса каждому шагу (div) с помощью Required или Optional as

Надеюсь, что есть ответ.

Ответы [ 3 ]

1 голос
/ 13 сентября 2011

Если вы разделите каждый шаг вашего мастера на отдельную форму, то при необходимости в форме этого шага можно будет выполнить проверку.

Обратите внимание, что атрибуты BY DEFAULT StringLength и RegEx будут проверяться только при вводе информации в это конкретное поле. Если поля не заполнены, проверка этих атрибутов не произойдет.

Что касается атрибутов Required, мне неясно, о чем вы спрашиваете. Вы говорите, что в определенном шаге есть поля, которые потребуются на основе условия в другом поле? Если это так, то вы должны реализовать условно обязательный валидатор.

1 голос
/ 13 сентября 2011

Вы можете сделать вашу модель представления реализующей IValidatableObject . Интерфейс требует одну функцию, IEnumerable<ValidationResult> Validate(ValidationContext validationContext). MVC сначала проверит модель по любым аннотациям DataAnnotations, а затем с помощью функции Validate для модели (дважды, что не всегда соответствует вашим ожиданиям).

Например,

public class Input : IValidatableObject
{
    public string Name { get; set; }
    // ... Other fields ...

    public virtual IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        var results = new List<ValidationResult>();

        if (String.IsNullOrEmpty(Name))
        {
            // ... Validation rules ...
            results.Add(new ValidationResult("Please enter a name.", new[] { "Name" }));
        }

        return results;
    }
}

Больше информации из блога Скотта Гатри.

0 голосов
/ 13 сентября 2011

Вы можете написать пользовательский атрибут проверки и выполнить эту логику проверки в методе IsValid, где у вас есть доступ к значению, и вы можете проверить, является ли значение пустым или пустым, и только затем продолжить спроверка по умолчанию.

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