【问题标题】:View for each condition in ASP .Net MVC Controller查看 ASP .Net MVC 控制器中的每个条件
【发布时间】:2009-09-03 16:16:50
【问题描述】:

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

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)并且在我的视图中执行 if else,如果有 0 个报告,可能会呈现部分视图“NoReportAvailablePartial”。

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

【问题讨论】:

    标签: asp.net-mvc view


    【解决方案1】:

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

    • 如果您发现您的视图开始包含大量 if/else 逻辑,那么可能应该将其重构为单独的视图并将逻辑置于控制器中。

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

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

    我相信基本的显示逻辑(例如 if (report.Count > 0) {})在视图中是可以的,但您应该坚持 DRY 原则,并且您的视图不应该被代码弄得乱七八糟。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-10
          • 1970-01-01
          • 1970-01-01
          • 2016-02-28
          • 2017-02-12
          • 2023-03-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多