在我的 MVC3 应用程序中,我有模型(不重要的属性已删除):
public class AccountViewModel
{
[StringLength(65)]
public string Property1 { get; set; }
[StringLength(65)]
public string Property2 { get; set; }
}
问题是当一个动作被提交验证属性调用两次时,我可以得到 4 个错误,而不是 2 个:
'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 也被调用了两次
我的行动
[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 已经包含两次错误。