【问题标题】:How MVC separate business logic from UI in ASP.NET MVC?MVC 如何在 ASP.NET MVC 中将业务逻辑与 UI 分离?
【发布时间】:2019-04-03 02:59:38
【问题描述】:

我是 ASP.NET MVC 和设计模式的初学者。仍在努力理解 MVC 如何将业务逻辑与 UI/View 分开。

假设我们有这种情况:

有一个 Employee 模型,其属性为 TotalSales 用于本月的总销售额,还有一个默认的 Index 视图。

所以在视图中,Razor 引擎应该填充员工的详细信息,例如姓名、性别、部门等。所以我们只需将视图模型传递给视图,这似乎运行良好。但是假设我希望 UI/HTML 还显示一个额外的段落“这个员工是一个好员工”,如果员工的 TotalSales > 10000 这个月,否则显示“这个员工需要提高他的营销技巧”。所以在视图模板中,我必须这样编码:

@if (employeeInstance.TotalSales > 10000)
{
    <p>This employee is a good employee</p>
}else
{
    <p>This employee needs to improve his marketing skill</p>
}

但是业务逻辑是不是混合在视图内部,这违背了MVC模式的目标?

【问题讨论】:

    标签: c# asp.net-mvc model-view-controller


    【解决方案1】:

    您可以在模型中使用您的逻辑。 就像你有下面这样的模型

    public class Employee
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public double TotalSales { get; set; }
        public string Comment
        {
            get
            {
                if (TotalSales > 10000)
                {
                    return "This employee is a good employee";
                }
                else
                {
                    return "This employee needs to improve his marketing skill";
                }
            }
        }
    }
    

    现在您可以在视图中使用Comment 属性

    <p>@Model.Comment</p>
    

    您也可以在您的业务层中设置此员工并将其绑定到您的视图模型并在您的视图中使用,这样您就可以将您的业务逻辑与您的视图分开,而无需在控制器中设置您的逻辑。 如果需要更多信息,请告诉我:)。

    【讨论】:

      【解决方案2】:

      通过返回 ViewBag(或返回 ViewModel)在 Controller 中执行逻辑

      控制器

      if (employeeInstance.TotalSales > 10000){
          ViewBag.employeetext = "This employee is a good employee";
      }
      else{
          ViewBag.employeetext = "This employee needs to improve his marketing skill";
      }
      

      查看

      <p>@ViewBag.employeetext</p>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-03
        • 2010-10-15
        • 2021-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-15
        相关资源
        最近更新 更多