在我的 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 已两次包含错误。