【问题标题】:MVC 4 Notification Messages to the User给用户的 MVC 4 通知消息
【发布时间】:2014-01-16 18:11:57
【问题描述】:

我正在使用 控制器 - 服务 - 存储库层模式 我是我的应用程序。存储库包含基本的 CRUD 操作和所有业务逻辑的服务层,而控制器保持非常精简(它们只调用服务层函数)。

我想向用户发送消息(成功、警告等),但我不确定如何从 服务层 级别执行此操作?我已经使用 TempData 和基类查找了一些解决方案,但这些解决方案似乎只适用于控制器级别。

有没有很好的解决方案将用户通知从服务层推送到视图?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-4


    【解决方案1】:

    看起来您在应用架构中很好地分离了关注点。保持这种方式是非常明智的 - 不要让您的服务层了解有关 UI 的任何信息。

    我会为服务层创建一些类以作为执行结果返回。

    public class ExecutionResult<T>
    {
        public T Result { get; set; }
        public string Message { get; set; }
    }
    

    这样您可以将Message 传递给ViewBag.UserNotification 并将其显示在您的视图中:

    编辑:示例用法:

    public class Math
    {
        public ExecutionResult<double> Divide(double number, double divideBy)
        {
            if (divideBy == 0)
            {
                return new ExecutionResult<double>
                    {
                        Result = double.NaN,
                        Message = "Division by zero is not possible"
                    };
            }
    
            return new ExecutionResult<double>
                {
                    Result = number/divideBy
                };
        }
    }
    

    这只是一个示例。在现实世界中,您会在 comparing values of type double

    中采取不同的方法

    【讨论】:

    • 感谢您的想法,您能否举例说明我将如何在服务层级别的函数中使用这种方法?
    • 有关如何使用的示例,请在此处查看 Entity Framework 如何使用 DbEntityValidationResult:msdn.microsoft.com/en-us/library/…
    【解决方案2】:

    使用这种模式,您不想直接从服务层与视图交互,因此您可以考虑在每次方法调用时将一些自定义数据传输对象返回给控制器。这些 DTO 可能包含任何错误消息或通知。然后控制器可以将这些数据传递给视图。

    【讨论】:

    • 感谢您的回答,但我如何在Return RedirectToAction("Index", "Event") 通话后显示消息?
    • RedirectToAction 具有接受“routeValues”的重载。这些可以是您想要的任何数据,在本例中是您的自定义 DTO。
    【解决方案3】:

    一种方法可能是让您的服务方法返回布尔值以指示成功或失败。然后控制器会知道这一点并采取相应的行动。

    另一种方法可能是方法返回一个自定义“错误”对象,其中包含有关服务中发生的情况的信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-10
      • 2017-02-23
      相关资源
      最近更新 更多