web-dev-qa-db-ja.com

ModelState.AddModelError-プロパティに関係しないエラーを追加するにはどうすればよいですか?

Create(FooViewModel fvm){...}のデータベースをチェックして、その組み合わせにfvm.prop1fvm.prop2が既に存在するかどうかを確認しています。もしそうなら、モデルステートにエラーを追加し、ビュー全体を返します。私は試した:

public ActionResult Create(FooViewModel fvm){
    if (ThatComboAlreadyExists(fvm)) {
      ModelState.AddModelError("Model", "There is already one like that");
      return View(fvm);
    }
}

...しかし、Html.ValidationSummaryにエラーが表示されることはありません。 「モデル」は適切なキーではないという疑いがありますが、Googleのようなものを見つけることができませんでした。

176
Scott Baker

私は最終的に私が探していた使用法の につまずきました-通常あなたが呼ぶように、そのプロパティの1つではなくモデルにエラーを割り当てるために:

ModelState.AddModelError(string key, string errorMessage);

ただし、キーには空の文字列を使用します。

ModelState.AddModelError(string.Empty, "There is something wrong with Foo.");

エラーメッセージは、期待どおり<%: Html.ValidationSummary() %>に表示されます。

299
Scott Baker

モデルの任意のプロパティにモデルエラーを追加できます。新しいプロパティの作成に関連するものがない場合はお勧めします。

例として、DBで電子メールが既に使用されているかどうかを確認し、アクションのEmailプロパティにエラーを追加します。これにより、ビューを返すときに、エラーがあることと、

<%: Html.ValidationSummary(true)%>
<%: Html.ValidationMessageFor(model => model.Email) %>

そして

ModelState.AddModelError("Email", Resources.EmailInUse);
26
VinnyG

モデルのドットプロパティを文字列に入れるとうまくいきました:ModelState.AddModelError("Item1.Month", "This is not a valid date");

1
Chris