2009-02-10 98 views
3

视图中的文件夹可以包含子文件夹吗?如果是这样,主计长如何接触他们?例如...我想有以下网址的正常工作:ASP.Net MVC视图体系结构

  • 管理员/指标
  • 管理员/资料/指数
  • 管理员/资料/编辑/ 1
  • 管理员/组/指数
  • 管理员/组/编辑/ 1

所以,我会创建一个配置文件和集团内部管理的子文件夹的文件夹?

我试过了,并且在全局文件中映射了一个路由,但似乎没有工作。

回答

4

好像您正在尝试创建管理面板并将其他控制器相关操作放入管理控制器中。我相信这不是最有效的方法。你可以简单地这样做:

使用RedirectToAction作为回报,如果需要的管理链接

  • 管理员/指标
  • 管理/档案
  • 管理员/组

并把其余的到适当的控制器

  • 资料/指数
  • 资料/编辑/ 1
  • 集团/索引
  • 组/编辑/ 1

同时添加[Authorize(Roles = "Administrator")][AcceptVerbs(HttpVerbs.Post)]用于创建/修改/删除操作

3

只是要返回动作是这样的:

return View("Profile/Index"); 

,这将使伎俩控制器找到“子视图”。为了将URL映射到正确的控制器,您可以使用路由系统,但忽略子视图,只需映射到正确的控制器并让控制器处理正确的视图。

+0

这其实是一个很好的答案.. + 1 :) – Ropstah 2010-03-24 21:51:20

1

还有另一种选项,使用区域的概念,以实现全球分组的观点和控制器,如在这个有趣的比利麦克福特的文章中所描述的:

Creating MVC "Areas" as Subfolders under Views

代码可用,因此你可以看看一切是怎么做的,但基本上与另一个,类似于原来的,但与不同的管理视图位置的替换视图引擎,并根据定义的区域注册的路线。

3

你可以创建自己的视图引擎,并覆盖到哪里寻找这些文件是这样的

public class MyViewEngine : WebFormViewEngine 
{ 
    public MyViewEngine() 
    { 
     ViewLocationFormats = new[] { 
      "~/{0}.aspx", 
      "~/{0}.ascx", 
      "~/Views/{1}/{0}.aspx", 
      "~/Views/{1}/{0}.ascx", 
      "~/Views/Shared/{0}.aspx", 
      "~/Views/Shared/{0}.ascx", 
     }; 

     MasterLocationFormats = new[] { 
      "~/{0}.master", 
      "~/Shared/{0}.master", 
      "~/Views/{1}/{0}.master", 
      "~/Views/Shared/{0}.master", 
     }; 
     PartialViewLocationFormats = ViewLocationFormats; 

    } 
} 

然后在你的应用程序启动加

ViewEngines.Engines.Add(new MyViewEngine()); 
+0

这是很好的信息...当我有更多的时间,我绝对想看看这个。 – 2009-02-12 18:08:20