Asp.net mvc 在ASP.Net MVC控制器中查看每个条件

Asp.net mvc 在ASP.Net MVC控制器中查看每个条件,asp.net-mvc,view,Asp.net Mvc,View,我是否应该为控制器中的每个条件创建相关视图?e、 我有以下代码 public ActionResult List(){ List<Report> reports = getReport(); if(report.Count > 0){ //returning the normal view return View(); }else{ //show the view for no reports return View("NoReportAvailable"); } }

我是否应该为控制器中的每个条件创建相关视图?e、 我有以下代码

public ActionResult List(){

 List<Report> reports = getReport();
 if(report.Count > 0){
 //returning the normal view
return View();
}else{
//show the view for no reports
return View("NoReportAvailable");
}

}
public ActionResult List(){
List reports=getReport();
如果(report.Count>0){
//返回正常视图
返回视图();
}否则{
//显示无报告的视图
返回视图(“NoReportAvailable”);
}
}
或者我也可以只有一个视图(List.aspx),如果在我的视图中有其他视图,可能会在0个报告的情况下呈现部分视图“NoReportAvailablePartial”


哪一个更好,或者你是如何处理这个场景的?

如果里面的逻辑主要用来隐藏空的部分,我更喜欢单一视图


但是,如果存在更大的差异,例如,为不同角色的用户提供额外的信息或控件,则最好安排特定的视图以保持视图清晰。

这取决于视图包含的其他HTML或逻辑,但我倾向于遵循以下粗略规则:

  • 如果您发现您的视图开始包含很多If/else逻辑,那么可能应该将其重构为单独的视图,并将逻辑放在控制器中

  • 如果您的视图除了If逻辑(即列表或“无可用报告”)之外不包含其他可重复的HTML,那么我将分离为2个视图,并将逻辑放置在控制器中。例如,如果您使用的母版页包含HTML的其余部分。我想这更清楚了

  • 如果您的页面包含大量HTML,如果视图分开,这些HTML将被复制,那么我将在视图中放置If逻辑,并根据列表是否包含项目呈现部分视图


我相信基本的显示逻辑(例如,if(report.Count>0){})在视图中是可以的,但是您应该坚持干巴巴的原则,并且您的视图不应该充斥着代码。

记住MVC模式的每个部分应该负责什么;视图应该只显示内容,而控制器应该决定要显示的内容

我肯定会选择两种不同的视图——其中一种负责呈现项目列表,另一种负责呈现错误消息。这是两件完全不同的事情,控制器应该决定应该呈现什么,而不是视图