Create(FooViewModel fvm){...}
のデータベースをチェックして、その組み合わせにfvm.prop1
とfvm.prop2
が既に存在するかどうかを確認しています。もしそうなら、モデルステートにエラーを追加し、ビュー全体を返します。私は試した:
public ActionResult Create(FooViewModel fvm){
if (ThatComboAlreadyExists(fvm)) {
ModelState.AddModelError("Model", "There is already one like that");
return View(fvm);
}
}
...しかし、Html.ValidationSummary
にエラーが表示されることはありません。 「モデル」は適切なキーではないという疑いがありますが、Googleのようなものを見つけることができませんでした。
私は最終的に私が探していた使用法の 例 につまずきました-通常あなたが呼ぶように、そのプロパティの1つではなくモデルにエラーを割り当てるために:
ModelState.AddModelError(string key, string errorMessage);
ただし、キーには空の文字列を使用します。
ModelState.AddModelError(string.Empty, "There is something wrong with Foo.");
エラーメッセージは、期待どおり<%: Html.ValidationSummary() %>
に表示されます。
モデルの任意のプロパティにモデルエラーを追加できます。新しいプロパティの作成に関連するものがない場合はお勧めします。
例として、DBで電子メールが既に使用されているかどうかを確認し、アクションのEmailプロパティにエラーを追加します。これにより、ビューを返すときに、エラーがあることと、
<%: Html.ValidationSummary(true)%>
<%: Html.ValidationMessageFor(model => model.Email) %>
そして
ModelState.AddModelError("Email", Resources.EmailInUse);
モデルのドットプロパティを文字列に入れるとうまくいきました:ModelState.AddModelError("Item1.Month", "This is not a valid date");