查看ASP .Net MVC控制器中的每个条件

时间:2009-09-03 16:16:51

标签: asp.net-mvc view

我应该为控制器中的每个条件创建相关视图吗?例如我有以下代码

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");
}

}

或者我也可以只有一个视图(List.aspx),如果在我的视图中也是如此,如果有0个报告,可能会呈现部分视图“NoReportAvailablePartial”。

哪一个更好,或者你是如何处理这种情况的?

3 个答案:

答案 0 :(得分:4)

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

  • 如果你发现你的视图开始包含很多if / else逻辑,那么它应该被重构为单独的视图并且逻辑放在控制器中。

  • 如果你的视图除了if逻辑(即列表或'no report available')之外不包含其他可重复的HTML,那么我将分离到2个视图并将逻辑放在控制器中。例如。如果您使用的是包含HTML其余部分的母版页。我认为它更清楚。

  • 如果您的页面包含大量HTML,如果视图是分开的,那么我会将if逻辑放在视图中,并根据列表是否包含项目呈现部分视图。

我相信基本的显示逻辑(例如,if(report.Count&gt; 0){})在视图中是可以的,但是您应该坚持使用DRY主体,并且您的视图不应该充满代码。

答案 1 :(得分:3)

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

我肯定会选择两种不同的视图 - 其中一种将负责呈现项目列表,其中一种将负责呈现错误消息。这是两个完全不同的东西,Controller应该决定应该渲染什么,而不是视图。

答案 2 :(得分:2)

如果内部逻辑主要处理隐藏空白的部分,我更喜欢单个视图。

如果存在更大的差异,例如,针对不同角色的用户的额外信息或控制,那么安排特定视图以保持视图清晰可能是个好主意。