3

我很好奇如何做到这一点,我想为论坛从控制器到视图的常规视图发送自定义错误消息(因此寻找两者的示例)。我已经看到 ModelState.AddError()我希望如何控制能够将其包装在前端 div 中的错误消息的外观。

有任何想法吗?

我对 ASP.net 很陌生,那里的教程对我来说似乎很混乱。所以我真的没有任何代码可以显示,因为我不确定我应该做什么。

4

2 回答 2

6

我相信您正在寻找自定义视图上的错误消息。您可以通过ModelState.AddModelError("", "error message")三种方式自定义错误消息,包括您添加的错误消息。

选项1

通过类使用Html.ValidationSummary()和自定义其外观validation-summary-errors。VS 中默认的 mvc 项目模板将默认包含该类。它的默认颜色为红色(我认为)。但是您实际上可以通过更改该类来控制错误摘要的各个方面。

.validation-summary-errors {
    border: 5px solid red; // thick red border
    color: #3904D9; // dark blue
    font-size: 1.5em; // quite big fonts
    font-weight: bold;
}

选项 2

ValidationSummary无序列表 ( li) 输出消息。如果您的项目要求以不同的方式显示错误消息,您可以通过检查ViewDataDictionary. 以下代码会将错误消息写入带有细红色边框的单独 div 中。样式是内联编写的,以使示例简单。

@foreach (var item in ViewData.ModelState) {
    if (item.Value.Errors.Any()) {
        foreach (ModelError e in item.Value.Errors) {
            <div style="border: 1px solid red;margin-bottom:5px;">
                @e.ErrorMessage</div>
        }
    }
}

选项 3

如果您不想在视图中添加逻辑,则可以扩展 htmlhelper(或创建自定义帮助器)。您基本上将在自定义 htmlhelper 中使用选项 2 中显示的相同逻辑。

public static class HtmlExtensions {
    public static MvcHtmlString CustomValidationSummary(this HtmlHelper helper)
    {
        var html = string.Empty;
        foreach (var item in helper.ViewData.ModelState)
        {
            if (item.Value.Errors.Any()) {
                foreach (ModelError e in item.Value.Errors) {
                    html 
                      += "<div style='border: 1px solid red;margin-bottom:5px;'>" 
                      + e.ErrorMessage 
                      + "</div>";
                }
            }
        }

        return MvcHtmlString.Create(html);
    }
}

然后以与使用相同的方式使用它ValidationSummary

@Html.CustomValidationSummary()
于 2013-04-24T17:17:10.637 回答
2

您可能想要查看该ViewBag对象。如果您ViewBag.ErrorMessage在控制器中设置,它将在您的视图中作为字符串提供。而且,实际上,您可以随意命名它,而不仅仅是 ErrorMessage。

添加这个并在您的视图中包含逻辑以仅显示如果!string.IsNullOrEmpty(ViewBag.ErrorMessage)并且您应该是好的。

这只是多种方法中的一种。ViewBag只是 的一个包装器ViewData,所以如果你被卡住了,你可能还想查看那个对象。

虽然这个答案并不全面,但希望它能给你一个起点。

祝你好运!!

于 2013-04-24T16:28:47.357 回答