0

Я знаю, что есть data annotation для проверки таких данных, как [Required], [Range()] и так далее. Не говоря уже о unobtrusive validation, что делает его проще на стороне клиента. Большое спасибо им.проверка входящего запроса, который зависит от значения свойства другого объекта?

Но как насчет того, нужно ли проверять значение, зависящее от значения свойства объекта? Я это scenarion, говорят:

Мои модели:

public class Schedule 
{ 
    public int Id { get; set; } 
    public DatetimeOffset StartDate { get; set; } 
    public DatetimeOffset EndDate { get; set; } 
} 

Сейчас в form,

<input type="text" name="StartDate" /> 
<input type="text" name="EndDate" /> 

Как бы вы подтвердить, что EndDate не должно быть less thanStartDate? Есть ли встроенный attribute в data annotation для этого? Или нужно сделать обычную? Было бы здорово, если бы он использовал файл unobstrusive validation от Microsoft.

Вот еще один сценарий:

Что делать, если вы могли бы сделать проверку, которая зависит от значения, сохраненного в БД? Скажем,

public class Bag 
{ 
    //constructor 
    public int Capacity { get; set; } 

    public virtual ICollection<Item> Items { get; set; } 
} 

public class Item 
{ 
    //constructor 
    public string Description { get; set; } 

    public virtual ICollection<Bag> Bags { get; set; } 
} 

Что, если бы вы сделали проверку на Items добавляемое к Bag, но если пользователь пытается ввести за предел Bag «s Capacity, должен показать ошибку проверки.

Возможно ли это?

В настоящее время я использую ASP.NET MVC 4. Первый подход EF5 Code.

ответ

1

Первый подход заключается в реализации IValidatableObject:

public class Schedule : IValidatableObject 
{ 
    public int Id { get; set; } 
    public DateTime StartDate { get; set; } 
    public DateTime EndDate { get; set; } 
    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
    { 
     if (StartDate > EndDate) 
     { 
      yield return new ValidationResult("End date must be greater than start date.", new [] { "EndDate"}); 
     } 
    } 
} 

Это будет выполняться автоматически во время модели связывания на стороне сервера.

Если вы хотите проверить на стороне клиента, у вас также есть варианты. Один из них - удаленная проверка. Вы можете прочитать об этом here. Подводя итог: вам нужно создать конструктор и действие, которое принимает проверенные значения и возвращает, если оно действительно или нет. Это может принимать более одного значения. Например, ID и имя пользователя, если вы хотите проверить уникальность.

Очевидно, что отправка значений на сервер не требуется при сопоставлении даты. Вы можете реализовать свой собственный атрибут проверки для обработки сравнения на стороне клиента. Кто-то пытался его реализовать here.

Смежные вопросы