C# MVC 4区域布线不工作

C# MVC 4区域布线不工作,c#,asp.net-mvc,c#-4.0,asp.net-mvc-4,asp.net-mvc-routing,C#,Asp.net Mvc,C# 4.0,Asp.net Mvc 4,Asp.net Mvc Routing,我创建了一个空的MVC4应用程序,一切正常,之后我在我的项目中添加了一个名为“版主”的区域。我的区域路由代码如下所示: using System; using System.Web.Mvc; namespace EskimoArt.Areas.Moderator { public class ModeratorAreaRegistration : AreaRegistration { public override string AreaName

我创建了一个空的MVC4应用程序,一切正常,之后我在我的项目中添加了一个名为“版主”的区域。我的区域路由代码如下所示:

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

我也有同样的问题。您可以查看App_Start/RouteConfig.cs并添加top-this代码区域registration.RegisterAllAreas()

创建创建区域/版主/控制器/DashboardController.cs

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

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

区域/主持人/视图/仪表板/索引.cshtml


您还需要在/Moderator/Views/Web.config…区域中有Web.config…

只需尝试从以下目录中删除内容,如前所述,然后重新构建项目

C:\Temp C:\Users\%Username%\AppData\Local\Microsoft\VisualStudio C:\Windows\Microsoft.NET\Framework\v4.0.30319\临时ASP.NET文件 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET 文件路径\To\Your\Project\obj\Debug

只需在
App\u Start
文件夹中的
RouteConfig.cs
方法中添加“namespace:”命名参数。并将“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" }
        );
    }

检查控制器的
名称空间

我已经将一些代码移到一个区域中,而名称空间仍然显示旧的位置


ReSharper有一个非常酷的选项来修复文件夹、项目或解决方案中所有文件的名称空间!解决此问题非常方便。

请确保在项目属性>Web>开始操作>中,如果定义了特定的页面|操作| url,则它与映射的路由匹配。

最好添加

RegisterAllAreas()

在global.asax.cs中。您必须按以下顺序放置

GlobalConfiguration.Configure(WebApiConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
请注意,在注册路由之后,RegisterAllAreas()应该是。 即
RouteConfig.RegisterRoutes(RouteTable.Routes)应该在
AreaRegistration.RegisteralAreas()之前。我已经尝试并测试过了,它对我有效


有关更多信息:

您所在区域是否有控制器?是的,我所在区域有控制器。我通过下面的选项解决了这个问题,即只需调用AreaRegistration.RegisterAlareas();在阅读下面的默认RouteKeep之前-检查控制器的名称空间,更具体地检查控制器中的名称空间是否与
MapRoute
中注册的名称空间匹配。类似于
namespace-Project.Web.Areas.Admin.Controllers
的内容匹配
namespace:new[]{“Project.Web.Areas.Admin.Controllers”}
GlobalConfiguration.Configure(WebApiConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);