2013-10-08 199 views
8

我創建了一個空的MVC4應用程序,所有的東西都工作正常,之後我添加一個區域到我的項目命名爲「主持人」。我區路由代碼是這樣的:MVC 4區域路由不起作用

using System; 
using System.Web.Mvc; 

namespace EskimoArt.Areas.Moderator 
{ 
    public class ModeratorAreaRegistration : AreaRegistration 
    { 
     public override string AreaName 
     { 
      get 
      { 
       return "Moderator"; 
      } 
     } 

     public override void RegisterArea(AreaRegistrationContext context) 
     { 
      context.MapRoute(
       "Moderator_default", 
       "Moderator/{controller}/{action}/{id}", 
       new {controller="Dashboard", action = "Index", id = UrlParameter.Optional } 
      ); 
     } 
    } 
} 

而且我Global.asx代碼是這樣的:

using System.Web.Http; 
using System.Web.Mvc; 
using System.Web.Optimization; 
using System.Web.Routing; 

namespace EskimoArt 
{ 
    // Note: For instructions on enabling IIS6 or IIS7 classic mode, 
    // visit http://go.microsoft.com/?LinkId=9394801 
    public class MvcApplication : System.Web.HttpApplication 
    { 
     protected void Application_Start() 
     { 
      AreaRegistration.RegisterAllAreas(); 

      WebApiConfig.Register(GlobalConfiguration.Configuration); 
      FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
      RouteConfig.RegisterRoutes(RouteTable.Routes); 
      BundleConfig.RegisterBundles(BundleTable.Bundles); 
     } 
    } 
} 

但現在我要訪問的

> http://localhost/Moderator/Dashboard 

它顯示了一個錯誤像這樣的頁

Server Error in '/' Application. 

The resource cannot be found. 

Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly. 

Requested URL: /Moderator 

Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.17929 
+0

你在你的地區有沒有控制器? –

+0

是的,我在我的區域有控制器。我通過下面的選項找出問題,就是調用AreaRegistration。RegisterAllAreas();在您的默認路線 –

回答

5

我有同樣的問題。你看看App_Start/RouteConfig.cs並在這個代碼的最上面添加AreaRegistration.RegisterAllAreas();

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
     AreaRegistration.RegisterAllAreas(); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 
} 

創建創建區/主持人/控制器/ DashboardController.cs

public class DashboardController : Controller 
{ 
    // 
    // GET: /Moderator/Dashboard/ 

    public ActionResult Index() 
    { 
     return View(); 
    } 
} 

,並創建

地區/主持人/瀏覽/控制面板/ Index.cshtml

您還需要在區域/主持人/視圖/ Web.config中有Web.config ...

1

只需嘗試d的\ Temp C:提到here和改造項目

C來自以下目錄elete內容\用戶\%用戶名%\應用程序數據\本地\微軟\ VisualStudio的 C:\ WINDOWS \ Microsoft.NET \框架\ V4 .0.30319 \臨時ASP.NET文件 C:\ WINDOWS \ Microsoft.NET \ Framework64 \ v4.0.30319 \臨時ASP.NET 文件路徑\要\您的\項目\ OBJ \調試

0

只需添加「命名空間:」中的RegisterRoutes()方法RouteConfig.csApp_Start文件夾中的命名參數。並將「namespace」的值指定給控制器的名稱空間,在該名稱空間中要調用操作方法。 在以下示例中,我想從項目的根目錄調用Village Controller中的Index()方法。

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Village", action = "Index", id = UrlParameter.Optional }, 
      namespaces: new string[] { "MvcApplication1.Controllers" } 
     ); 
    } 
7

檢查控制器的namespace

我已經將一些代碼移動到一個區域,並且該命名空間仍然顯示舊的位置。

ReSharper有一個很酷的選項來修復文件夾,項目或解決方案中所有文件的命名空間!解決這個問題非常方便。

+2

之前更具體地檢查您的控制器中的命名空間是否與'MapRoute'中的註冊命名空間匹配。類似於'namespace Project.Web.Areas.Admin.Controllers'匹配'namespaces:new [] {「Project.Web.Areas.Admin.Controllers」}' – 2015-04-15 13:32:40

+1

謝謝!!!!!! – Barry

0

確保在項目屬性> Web>啓動操作>如果特定頁面|行動| url被定義,它與映射的路由匹配。