У меня есть настройка FluentValidation на моем веб-сайте MVC. Один из моих объектов есть проверки достоверности, который использует команду должна вызвать функцию:FluentValidation делает проверку в неподходящее время
RuleFor(m => m).Must(m => reimbursementMonthsRequired(m)).WithMessage("Wrong!").WithName("ReimbursementStartMonth");
Функцию reimbursementMonthsRequired проверяет значение на объекте и коллекцию под объектом, чтобы определить действительность.
У меня есть метод Post, который принимает список значений, который используется для обновления этой коллекции:
[HttpPost]
public ActionResult AddGrant(Grant item, List<byte> reimbursementMonths)
{
item.UpdateReimbusementMonths(Database, reimbursementMonths);
if (ModelState.IsValid)
{
Database.Grants.Add(item);
Database.SaveChanges();
...
Проблема у меня в том, что в этой функции, то проверка правильности вызывается перед UpdateReimbusementMonths является называется. Поэтому данных, которые мне нужны для проверки правильности работы, пока нет. Странно, так это то, что в моей функции редактирования проверка выполняется после вызова UpdateReimbursementMonths, поэтому она работает правильно. Это то, что, что делает:
[HttpPost]
public ActionResult EditGrant(int id, List<byte> reimbursementMonths)
{
var item = Database.Grants.Find(id);
item.UpdateReimbusementMonths(Database, reimbursementMonths);
TryUpdateModel(item);
if (ModelState.IsValid)
...
Так как я могу получить мою Добавить функцию, чтобы сделать проверку в нужное время - время после вызова функции, чтобы обновить коллекцию? Кажется, что если бы я мог повторно запустить проверки проверки после этого вызова функции, это сработает.
Валидация, о которой вы упомянули, является тем, что для объекта Grant? – pjobs
Не лучшее решение ... но как насчет вас Удалить ключ от ModelState (используя ModelState.Remove) перед ModelState.IsValid? Затем вы можете добавить свои гранты и добавить ключ обратно в ModelState и снова проверить его. – Sparrow