2013-10-08 8 views
8

Ich habe eine leere MVC4-Anwendung erstellt, alle Dinge funktionieren gut, danach füge ich meinem Projekt einen Bereich namens "Moderator" hinzu. Mein Bereich Routing-Code ist wie folgt:MVC 4 Area Routing funktioniert nicht

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

Und mein Global.asx Code ist wie folgt:

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

Aber jetzt möchte ich die

Zugang zu
> http://localhost/Moderator/Dashboard 

ein Fehler zeigt Seite wie diese

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

Haben Sie Controller in Ihrer Nähe? –

+0

Ja Ich habe Controller in meiner Umgebung. Ich erkläre das Problem durch folgende Option, die ist, dass nur AreaRegistration aufrufen.RegisterAllAreas(); vor Ihrer Standardroute –

Antwort

5

Ich hatte das gleiche Problem. Sie schauen auf App_Start/RouteConfig.cs und fügen diesen Code hinzu. 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 } 
     ); 
    } 
} 

erstellen erstellen Bereiche/Moderator/Controller/DashboardController.cs

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

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

und erstellen

Areas/Moderator/Ansichten/Dashboard/Index.cshtml

Sie müssen auch haben Sie Web.config in Bereiche/Moderator/Ansichten/Web.config ...

1

Versuchen Sie einfach d elete Inhalte aus folgenden Verzeichnisse als here erwähnt und Umbauprojekt

C: \ Temp C: \ Benutzer \% Benutzername% \ AppData \ Local \ Microsoft \ Visualstudio C: \ Windows \ Microsoft.NET \ Framework \ v4 .0.30319 \ Temporary ASP.NET Files C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP.NET Dateien Pfad \ Ihr \ Project To \ \ obj \ Debug

0

fügen Sie einfach die "namespace:" benannter Parameter in RegisterRoutes() Methode von RouteConfig.cs in App_Start Ordner. Und geben Sie den Wert von "namespace" in den Namespace Ihres Controllers ein, in dem Sie die Aktionsmethode aufrufen möchten. Im folgenden Beispiel möchte ich Index() Methode in Village Controller von der Wurzel des Projekts aufrufen.

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

Überprüfen Sie die namespace des Controllers.

Ich hatte Code in einen Bereich verschoben und der Namespace zeigte immer noch den alten Speicherort.

ReSharper hat eine sehr coole Option, um die Namespaces aller Dateien im Ordner, Projekt oder der Lösung zu reparieren! Es ist sehr praktisch, dies zu beheben.

+2

Überprüfen Sie genauer, dass der Namespace in Ihrem Controller mit dem registrierten Namespace in der MapRoute übereinstimmt. Etwas wie 'namespace Project.Web.Areas.Admin.Controllers' stimmt mit' namespaces: new [] {"Project.Web.Areas.Admin.Controllers"} ' –

+1

DANKE !!!!!! – Barry

0

Stellen Sie sicher, dass in Projekteigenschaften> Web> Aktion starten> wenn eine bestimmte Seite | Aktion | Die URL ist definiert, sie stimmt mit den zugeordneten Routen überein.

Verwandte Themen