我无法在ValidationSummary中显示自定义错误。 (正如预期的那样,属性级错误会正确显示。)
控制器:
[HttpPost]
public async Task<ActionResult> Contact(ContactViewModel model)
{
if (ModelState.IsValid)
{
try
{
Mail mail = new Mail
{
ToAddress = "user@example.com",
Subject = model.Subject,
Body = model.Message
};
if (!string.IsNullOrWhiteSpace(model.Email))
mail.FromAddress = model.Email;
await mail.SendAsync();
return View("ContactConfirm");
}
catch (Exception ex)
{
ModelState.AddModelError(string.Empty, ex);
}
}
return View(model);
}
查看:
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
我可以单步执行代码并看到行ModelState.AddModelError(string.Empty, ex);
已执行,并且存在有效错误,但标记不会呈现任何错误消息。
注意:虽然页面上看不到任何内容,但验证摘要的基础标记如下:
<div class="validation-summary-errors text-danger">
<ul>
<li style="display:none"></li>
</ul>
</div>
任何人都可以帮我弄清楚为什么我的错误没有显示出来吗?
答案 0 :(得分:3)
问题在于:
catch (Exception ex)
{
ModelState.AddModelError(string.Empty, ex);
}
由于其中一个重载接受Exception
,我认为文本将从我提供的异常中正确提取。但它不是。
进行以下更改会导致错误在验证摘要中正确显示。
catch (Exception ex)
{
ModelState.AddModelError(string.Empty, ex.Message);
}
答案 1 :(得分:0)
您可能希望将第一个参数更改为false:
@Html.ValidationSummary(false, "", new { @class = "text-danger" })
它指定是否排除属性错误。