我是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模式的目标?
答案 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>