【问题标题】:Sending a error message from the controller to the view in ASP.net MVC3将错误消息从控制器发送到 ASP.net MVC3 中的视图
【发布时间】:2013-04-24 16:23:34
【问题描述】:

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

有什么想法吗?

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

【问题讨论】:

    标签: asp.net-mvc-3 model-view-controller


    【解决方案1】:

    我相信您正在寻找自定义视图上的错误消息。您可以通过三种方式自定义错误消息,包括您使用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()
    

    【讨论】:

    • 我想知道您如何将错误从控制器发送到视图?是 ModelState.AddError() 吗?
    • @TheWebs 你到底想做什么?表单验证?
    • @TheWebs 使用 ModelState.AddModelError
    【解决方案2】:

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

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

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

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

    祝你好运!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-25
      • 1970-01-01
      相关资源
      最近更新 更多