【问题标题】:ASP.Net MVC View ArchitectureASP.Net MVC 视图架构
【发布时间】:2010-10-06 17:04:36
【问题描述】:

视图中的文件夹可以有子文件夹吗?如果是这样,控制器如何到达他们?例如...我想让以下网址正常工作:

  • 管理员/索引
  • 管理员/个人资料/索引
  • 管理员/个人资料/编辑/1
  • 管理员/组/索引
  • 管理员/组/编辑/1

那么,我是否可以在 Admin 中为 Profile 和 Group 创建一个文件夹作为子文件夹?

我尝试了这个并在全局文件中映射了一条路线,但这似乎不起作用。

【问题讨论】:

    标签: asp.net-mvc model-view-controller architecture routing


    【解决方案1】:

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

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

    • 管理员/索引
    • 管理员/个人资料
    • 管理员/组

    让适当的控制器休息

    • 简介/索引
    • 个人资料/编辑/1
    • 组/索引
    • 组/编辑/1

    还添加 [Authorize(Roles = "Administrator")][AcceptVerbs(HttpVerbs.Post)] 用于创建/编辑/删除操作

    【讨论】:

      【解决方案2】:

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

      return View("Profile/Index");
      

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

      【讨论】:

        【解决方案3】:

        您可以创建自己的 ViewEngine 并覆盖在哪里查找类似这样的文件

        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());
        

        【讨论】:

        • 这是一个很好的信息......当我有更多时间时,我肯定想看看这个。
        • 这正是我要找的,谢谢你的简单例子!!!顺便说一句,如果你能以某种方式获得一个“主题”变量,你也可以用它来实现动态主题文件夹...... :)
        【解决方案4】:

        还有另一个选项是使用区域的概念来实现视图和控制器的全局分组,如这篇有趣的 Billy McCafferty 的帖子中所述:

        Creating MVC "Areas" as Subfolders under Views

        代码可用,因此您可以检查一切是如何完成的,但基本上将 ViewEngine 替换为另一个,与原始类似,但视图位置的管理不同,并根据定义的区域注册路线。

        【讨论】:

          猜你喜欢
          • 2013-12-27
          • 1970-01-01
          • 2010-10-01
          • 1970-01-01
          • 1970-01-01
          • 2012-10-18
          • 2011-02-20
          • 2010-09-25
          • 2012-11-06
          相关资源
          最近更新 更多