私はFluentValidationをMVC Webサイトに設定しています。FluentValidationが間違った時刻に妥当性検査を行っています
RuleFor(m => m).Must(m => reimbursementMonthsRequired(m)).WithMessage("Wrong!").WithName("ReimbursementStartMonth");
reimbursementMonthsRequired機能が有効性を判断するために、オブジェクトの下のオブジェクトの値とコレクションをチェックします:私の目的の1つは、関数を呼び出す必要がありますコマンドを使用して検証チェックを持っています。
私はそのコレクションを更新するために使用される値のリストを受け付け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)
...
だから私は私の追加機能は、適切な時間に検証を行うことを得るのですか - コレクションを更新するために、関数呼び出しの後であること?その関数呼び出しの後で検証チェックを再実行できればうまくいくようです。
あなたが言ったバリデーションは、グラントオブジェクトのものですか? – pjobs
最高の解決策ではありませんが、あなたはどうですかModelState.IsValidの前に(ModelState.Removeを使用して)KeyStateからキーを削除しますか?次に、あなたのグラントを追加し、キーをModelStateに追加して、再度検証します。 – Sparrow