MVC如何在ASP.NET MVC中将业务逻辑与UI分开?

时间:2019-04-03 02:59:39

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

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

假设我们有这种情况:

对于该月的总销售额,有一个具有TotalSales属性的Employee模型,并且还有一个默认的Index视图。

因此,在视图中,剃须刀引擎应填充员工的详细信息,例如姓名,性别,部门等。因此,我们只需要将视图模型传递给视图,就可以正常工作。但是,假设我要在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模式的目标?

2 个答案:

答案 0 :(得分: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>

您还可以在业务层中设置此员工,并将其绑定到您的视图模型中并在视图中使用,这样,您就可以将业务逻辑与视图分离,而无需在控制器中设置逻辑。 让我知道是否需要更多信息:)。

答案 1 :(得分:0)

通过返回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>