2013-10-08 22 views
8

Ho creato un'applicazione MVC4 vuota, tutto funziona correttamente, dopo di che aggiungo un'area al mio progetto denominato "Moderatore". La mia area codice di routing è come questo:MVC 4 Area Routing non funziona

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

E il mio codice Global.asx è come questo:

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

Ma ora voglio accedere al

> http://localhost/Moderator/Dashboard 

Essa mostra un errore Pagina come questa

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

Avete dei controller nella vostra zona? –

+0

Sì, ho il controller in La mia area. Capisco il problema in basso opzione che è che basta chiamare AreaRegistration.RegisterAllAreas(); prima del percorso predefinito –

risposta

5

Ho avuto lo stesso problema. Guardi su App_Start/RouteConfig.cs e aggiungi in cima questo codice 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 } 
     ); 
    } 
} 

Crea Crea Aree/Moderatore/Controller/DashboardController.cs

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

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

e creare

Aree/Moderatore/Vista/cruscotto/Index.cshtml

È inoltre necessario avere Web.config in Aree/Moderatore/Viste/Web.config ...

1

Basta provare ad contenuti elete da seguenti directory come detto here e ricostruire progetto

C: \ Temp C: \ Users \% username% \ AppData \ Local \ Microsoft \ VisualStudio C: \ Windows \ Microsoft.NET \ Framework \ v4 .0.30319 \ file temporanei di ASP.NET C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP.NET file path \ to \ vostro \ Project \ obj \ Debug

0

Basta aggiungere il "namespace:" parametro denominato nel metodo RegisterRoutes() di RouteConfig.cs nella cartella App_Start. E specifica il valore di "namespace" nello spazio dei nomi del tuo controller, all'interno del quale vuoi chiamare il metodo di azione. Nell'esempio seguente voglio chiamare il metodo Index() in Village Controller dalla radice del progetto.

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

Controllare la namespace del controller.

Avevo spostato del codice in un'area e lo spazio dei nomi mostrava ancora la vecchia posizione.

ReSharper ha un'opzione molto interessante per correggere gli spazi dei nomi di tutti i file nella cartella, nel progetto o nella soluzione! È molto utile per risolvere questo problema.

+2

In particolare, verificare che lo spazio dei nomi nel controller corrisponda allo spazio dei nomi registrato nel 'MapRoute'. Qualcosa come 'namespace Project.Web.Areas.Admin.Controllers' corrisponde agli spazi dei nomi': new [] {"Project.Web.Areas.Admin.Controllers"} ' –

+1

GRAZIE !!!!!! – Barry

0

Assicurarsi che nelle proprietà del progetto> Web> Avvia azione> se una pagina specifica | azione | url è definito, corrisponde alle rotte mappate.

Problemi correlati