【问题标题】:ASP.NET MVC, areas, routing and a controller factoryASP.NET MVC、区域、路由和控制器工厂
【发布时间】:2010-04-05 10:07:24
【问题描述】:

我在使用 ASP.NET MVC 应用程序的一些路由方面遇到了一个有趣的问题。我正在构建一个 CMS,我有一个包罗万象的处理程序,它接受 URL 并检查数据库中是否有一些匹配的内容。如果是,则显示它,否则我们会得到 404。

现在我已经完成了一些测试数据的工作,我开始编写一个快速的管理系统。我想我会使用一些融入 MVC 2 的新区域功能,所以我创建了一个名为 Admin 的区域和一个名为 Home 的控制器。 但是现在我有一个问题,即在请求应用程序根路径时返回管理区域中的默认 HomeController。

问题是“根”应用程序(托管所有区域的那个)没有其他 HomeController,而是将根目录重定向到我的包罗万象的处理程序并从数据库中填充。所以现在控制器工厂正在返回最匹配的控制器,它认为是管理区域之一,我真正需要的是让它完全不匹配 - 就像以前一样。

除了将 Admin HomeController 重命名为其他名称之外,还有其他解决方案吗?

【问题讨论】:

    标签: asp.net-mvc-2 asp.net-mvc-routing


    【解决方案1】:

    在管理区域,打开 AdminAreaRegistration.cs

    在控制器所在的位置添加正确的命名空间:

       public override void RegisterArea(AreaRegistrationContext context)
          {
             context.MapRoute(
                 "Admin_default",
                 "Admin/{controller}/{action}/{id}",
                 new { action = "Index", id = UrlParameter.Optional }*,
                 new string[] { "Stridh.Areas.Admin.Controllers" }*
             );
          }
    

    现在在 global.asax 中做同样的事情:

         routes.MapRoute(
             "Default", // Route name
             "{controller}/{action}/{id}", // URL with parameters
             new { controller = "Home", action = "Index", id = UrlParameter.Optional },
             new string[] { "Stridh.Controllers" } // Parameter defaults
         );
    

    【讨论】:

      【解决方案2】:

      编辑...(抱歉最后一个答案离题了)。

      在黑暗中拍摄。尝试更改默认地图路线....

      routes.MapRoute( “默认”,
      "{controller}/{action}/{id}",
      新的 { 控制器 = "Home", area="", action = "Index", id = "" }

      或者也许 area = null。

      或者把控制器从家里换成别的东西。

      【讨论】:

      • 不安静发生了什么,当我请求 localhost 时,它将尝试在 localhost/Area 加载控制器,因为这是唯一可用的 HomeController 实例。
      • 您可能还想将命名空间选项添加到您的默认路由声明中。
      猜你喜欢
      • 2010-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-17
      • 2011-03-06
      • 2015-10-02
      • 1970-01-01
      • 2018-05-31
      相关资源
      最近更新 更多