Условная проверка моделей - PullRequest
0 голосов
/ 28 марта 2012

У меня есть следующая модель:

public class DeliveryTracking
    {
        public string TrackingRef { get; set; }
        public string SalesID { get; set; }
        public string PackingSlipID { get; set; }
        public string Type { get; set; }
    }

У меня есть действие, которое устанавливает некоторые значения для этой модели, а затем возвращает его в вид, подобный так:Теперь у меня есть форма, в которой я могу установить TrackingRef следующим образом:

@Html.HiddenFor(model => model.SalesID)
@Html.HiddenFor(model => model.PackingSlipID)
@Html.HiddenFor(model => model.Type)
@Html.EditorFor(model => model.TrackingRef)
<input type="submit" value="Submit" />

Я хочу, чтобы этот TrackingRef проверял различные длины в зависимости от используемого типа отслеживания.Например, я установил тип отслеживания TNT, поэтому я хочу, чтобы он имел минимальную длину 7, но если я установил его на ИБП, я хочу, чтобы он имел минимальную длину 8, возможно ли это?Я знаю, что могу установить атрибут MinLength в моей модели, но я хочу, чтобы он был динамическим / условным в зависимости от типа отслеживания, который я использую.

1 Ответ

1 голос
/ 28 марта 2012

Вы можете добавить свои правила условной проверки.Сделайте вашу модель наследуемой от IValidatableObject и реализуйте метод Validate.Вы могли бы сделать что-то ниже (я не проверял это):

public class DeliveryTracking : IValidatableObject
    {
        public string TrackingRef { get; set; }
        public string SalesID { get; set; }
        public string PackingSlipID { get; set; }
        public string Type { get; set; }
    }

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
{ 
    if (Type ==typeOf(TNT) && TrackingRef.Length < 7
        return new ValidationResult("TrackingRef must be 7.");
    if(Type == typeOf(UPS ) && TrackingRef.Length < 8)
        return new ValidationResult("TrackingRef must be 8.");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...