Ich habe FluentValidation Setup auf meiner MVC-Website. Eine meiner Aufgaben hat eine Plausibilitätsprüfung, die die Must-Befehl verwendet eine Funktion aufzurufen:FluentValidation Validierung zur falschen Zeit
RuleFor(m => m).Must(m => reimbursementMonthsRequired(m)).WithMessage("Wrong!").WithName("ReimbursementStartMonth");
Die reimbursementMonthsRequired Funktion prüft einen Wert auf dem Objekt und eine Sammlung unter dem Objekt Gültigkeit zu bestimmen.
Ich habe eine Post-Methode, das eine Liste von Werten annimmt, die diese Sammlung zu aktualisieren, verwendet wird:
[HttpPost]
public ActionResult AddGrant(Grant item, List<byte> reimbursementMonths)
{
item.UpdateReimbusementMonths(Database, reimbursementMonths);
if (ModelState.IsValid)
{
Database.Grants.Add(item);
Database.SaveChanges();
...
Das Problem, das ich habe, ist, dass in dieser Funktion wird die Validierungsprüfung vor UpdateReimbusementMonths genannt ist namens. Die Daten, die ich für die Validierungsprüfung zur Verfügung haben muss, sind also noch nicht vorhanden. Die seltsame Sache ist, ist, dass in meiner Edit-Funktion die Validierung passiert, nachdem ich UpdateReismurementMonths aufgerufen habe, so dass es richtig funktioniert. Dies ist, was das tut:
[HttpPost]
public ActionResult EditGrant(int id, List<byte> reimbursementMonths)
{
var item = Database.Grants.Find(id);
item.UpdateReimbusementMonths(Database, reimbursementMonths);
TryUpdateModel(item);
if (ModelState.IsValid)
...
Wie kann ich meine Funktion Hinzufügen zur richtigen Zeit zu tun Validierung erhalten - nach dem Funktionsaufruf wird die Sammlung zu aktualisieren? Es scheint, dass, wenn ich die Validierungsprüfungen nach diesem Funktionsaufruf erneut ausführen könnte, das funktionieren würde.
Validierung Sie erwähnt, ist das für Grant-Objekt? – pjobs
Nicht die beste Lösung ... aber wie steht es mit Ihnen Entfernen Sie den Schlüssel aus ModelState (mit ModelState.Remove) vor dem ModelState.IsValid? Dann können Sie Ihre Berechtigungen hinzufügen und den Schlüssel zum ModelState hinzufügen und erneut validieren. – Sparrow