代码之家  ›  专栏  ›  技术社区  ›  erlando

这是从ASP.NET MVC控制器返回不同视图的正确模式吗?

  •  4
  • erlando  · 技术社区  · 14 年前

    我有一个应用程序,它有一个公共的“最终用户”模式和一个“后台”模式。两种“模式”几乎共享相同的控制器逻辑,但这些不同“模式”的用户界面却截然不同。

    Controllers\
      HomeController.cs
    
    Views
      BackOffice
        Index.aspx
      Public
        Index.aspx
    
    Shared
      BackOfficeSite.Master
      PublicSite.Master
    

    在我的 HomeController.cs 我有这样的逻辑:

    public ActionResult Index()
    {
      var devices = DeviceRepository.FindDevicesByCustomer(100);
    
      if(IsBackOffice()) 
      {
         return View(@"~/Views/BackOffice/Index.aspx", devices);
      }
    
      return View(@"~/Views/Public/Index.aspx", devices);
    }
    

    我正在使用ASP.NET MVC 2。

    3 回复  |  直到 12 年前
        1
  •  3
  •   rob waminal    14 年前

    在视图文件夹中,可以将BackOffice和Public放在视图/主文件夹中

    Views
        Home
          BackOffice
            Index.aspx
          Public
            Index.aspx
    

    return View("BackOffice/Index", devices);
    
    return View("Public/Index", devices);
    

        2
  •  1
  •   BenMorel Manish Pradhan    11 年前

    我想说,如果两个视图需要的数据是相同的,那么使用相同的控制器/路由就可以了。

    然而,如果它们真的完全不同,那么每个视图都可能需要它自己的数据集,在这种情况下,您可能会把自己挖到一个洞里。

    return IsBackOffice()? getBackOfficeView() : getPublicView() ;
    

    这样,在同一个控制器操作中就不会有一堆if/else。

        3
  •  0
  •   Esteban Araya    14 年前

    我会写一个视图引擎来把它抽象出来。这样,控制器所要做的就是:

    return View(); //or one of the overloads