Обычно я использую это решение, когда хочу проверить что-то на сервере. Я знаю, что вы можете положиться на модель валидации, которую использует MVC, но когда я делаю проверки, я пытаюсь использовать отдельный проект, если мне нужно сделать для них единичный тест. Допустим, у вас есть два приложения: один рабочий стол и один веб-сайт, тогда оба могут совместно использовать ValidationProject вместо повторения кода в обоих приложениях для одного и того же «Просмотр» / «Экран». Идея здесь заключается в том, чтобы изолировать проект Validation как независимый проект вашего решения.
Итак, вы можете скачать проект FluentValidation от NuGet, FluentValidation использует правила внутри конструктора, вы можете увидеть здесь документацию https: //github.com/JeremySkinner/FluentValidation/wiki
Например, можно использовать это правило даты, например, вы можете также установить правила для своего значения min и вашего максимального значения:
public class CustomerValidator: AbstractValidator {
public CustomerValidator() {
RuleFor(customer => customer.startDate)
.NotNull()
.WithMessage("You should select a start date")
.Must(d => d.HasValue && d.Value <= DateTime.Today)
.WithMessage("The start date should not be greather than current month/year");
}
Теперь внутри вашего контроллера
[HttpPost]
public ActionResult Index(Customer c)
{
if(ModelState.IsValid)
{
var validator= new CustomerValidator();
var valResult = validator.Validate(c);
if (valResult.Errors.Count != 0)
{
valResult.Errors.ForEach(x => ModelState.AddModelError(x.PropertyName, x.ErrorMessage));
return View(vm);
}
//Your code here
}
}
Это вызывает неопределенное поведение. От cppreference.com :
Поведение не определено, если указанная последовательность приращений или уменьшений потребует, чтобы итератор был без приращения (такой как итератор «за конец» ) или что невырожденный итератор (такой как передний итератор или сингулярный итератор) уменьшается.
blockquote>