【问题标题】:How to use MapRoute with Areas in MVC3如何在 MVC3 中将 MapRoute 与区域一起使用
【发布时间】:2012-07-22 01:06:13
【问题描述】:

我的网络应用中有一个名为“Admin”的区域。

所以,http://localhost.com/Admin 转到管理区域中的主控制器和索引操作。

但是,我希望能够使用以下 URL 访问 Admin Home Controller 和 Index Action:

http://localhost.com/Hello

这是我的尝试:

routes.MapRoute(
            "HelloPage",
            "Hello/{controller}/{action}",
            new{area= "Admin", controller = "Home", action = "Index"},
            new[] { typeof(Areas.Admin.Controllers.HomeController).Namespace });

如您所见,我指定了命名空间和区域,但得到的只是路由错误:

未找到视图“索引”或其主视图,或者没有视图引擎支持搜索到的位置。

不是在管理区域搜索。

有什么想法吗?

【问题讨论】:

  • 听起来路由是正确的,并且存在 HomeController.Index() 操作。它实际上是在告诉你,它认为应该有的地方并不存在。
  • 嘿斯科特姆。问题是,当它抛出异常时,它会告诉你它在哪里寻找。而且它没有在 Areas/Admin 目录中查找...?

标签: c# asp.net-mvc-3 asp.net-mvc-routing asp.net-mvc-3-areas


【解决方案1】:

试试这个:

routes.MapRoute(
       "HelloPage",
       "Hello/{controller}/{action}/{id}",
       new { area = "Admin", controller = "Home", action = "Index", id = UrlParameter.Optional }
);

然后将其添加到您的管理控制器操作中:

  if (!this.ControllerContext.RouteData.DataTokens.ContainsKey("area"))
  {
      this.ControllerContext.RouteData.DataTokens.Add("area", "Admin")
  }

您可以check here 获取更多文档。

【讨论】:

    【解决方案2】:

    问题是我在 Global.asax 中设置路由。

    我应该在管理区域的 AreaRegistration 中设置它。一旦我这样做了,问题就解决了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-23
      • 2014-02-01
      • 2015-11-06
      • 1970-01-01
      相关资源
      最近更新 更多