206

データベースをチェックインして、とがその組み合わせにすでに存在する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では何も見つかりませんでした。

4

4 に答える 4

360

私は最終的に、私が探していた使用法の例に出くわしました-いつものようにモデルのプロパティの1つではなく、一般的にモデルにエラーを割り当てるために:

ModelState.AddModelError(string key, string errorMessage);

ただし、キーには空の文字列を使用してください。

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

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

于 2011-04-21T07:19:51.897 に答える
28

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

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

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

ModelState.AddModelError("Email", Resources.EmailInUse);
于 2011-04-21T04:12:07.447 に答える
4

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

于 2014-11-20T22:34:39.227 に答える
0

一貫した出力形式を得るには、以下の回答を使用してみてください:-new ValidationProblemDetails()

if (!ModelState.IsValid) { 
ModelState.AddModelError("ErrorKey", "ErrorValue");
return BadRequest(new ValidationProblemDetails(this.ModelState));
}

出力フォーマット:

{
    "errors": {
        "ErrorKey": [
            "ErrorValue"
        ]
    },
    "title": "One or more validation errors occurred.",
    "status": 400,
}
于 2022-01-31T07:16:44.530 に答える