私のMVC3アプリケーションでは、モデルを持っています(重要なプロパティは削除されていません):
public class AccountViewModel
{
[StringLength(65)]
public string Property1 { get; set; }
[StringLength(65)]
public string Property2 { get; set; }
}
問題は、アクションが送信された検証属性が 2 回呼び出された場合で、要約すると 2 つではなく 4 つのエラーが発生する可能性があります。
'Property1' length must be less than 65 characters
'Property1' length must be less than 65 characters
'Property2' length must be less than 65 characters
'Property2' length must be less than 65 characters
コントローラーのコードで Validate メソッドを使用していません。この問題はカスタム属性でも発生しますが、必須属性では発生しません。また、カスタム属性の ctor も 2 回呼び出されることに注意する必要があります。
私の行動
[HttpPost]
public ActionResult CreateOrEdit(AccountViewModel model) {
if (!ModelState.IsValid) {
return View("Edit", model);
}
try {
_accountService.InsertOrUpdate(model);
}
catch (Exception ee) {
ModelState.AddModelError("", ee.Message);
return View("Edit", model);
}
return RedirectToAction("Index");
}
ビューでは、次を使用してエラーをレンダリングします。
@{
var errors = ViewData.ModelState.Errors();
<div class="alert alert-block alert-error @(errors.Count == 0 ? "hide" : "")" >
<h4 class="alert-heading"> You got an error!</h4>
<ul>
@foreach (var error in errors) {
<li>@error</li>
}
</ul>
</div>
}
そして、ViewData.ModelState に既に 2 回エラーが含まれていることをもう一度再確認します。