ValidationSummary不显示错误

时间:2017-04-28 17:07:53

标签: c# asp.net asp.net-mvc razor

我无法在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>

任何人都可以帮我弄清楚为什么我的错误没有显示出来吗?

2 个答案:

答案 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" })

它指定是否排除属性错误。