10

我创建了一个空的 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
4

6 回答 6

14

检查namespace你的控制器。

我已经将一些代码移动到一个区域中,并且命名空间仍然显示旧位置。

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

于 2015-02-20T13:54:38.210 回答
8

我有同样的问题。您查看 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 }
        );
    }
}

创建创建Areas/Moderator/Controllers/DashboardController.cs

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

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

并创建

区域/版主/视图/仪表板/Index.cshtml

您还需要在 Areas/Moderator/Views/Web.config 中有 Web.config ...

于 2013-10-08T06:08:12.110 回答
1

只需尝试从此处提到的以下目录中删除内容并重建项目

C:\Temp C:\Users\%Username%\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 Files Path\To\Your\Project\obj\Debug

于 2014-02-04T13:15:18.127 回答
0

只需在文件夹中的RegisterRoutes()方法中添加“命名空间:”命名参数。并将“命名空间”的值指定给控制器的命名空间,您要在其中调用操作方法。在下面的示例中,我想从项目的根目录调用 Village Controller 中的方法。RouteConfig.csApp_StartIndex()

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" }
        );
    }
于 2014-08-18T08:46:27.473 回答
0

最好添加

AreaRegistration.RegisterAllAreas();

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

GlobalConfiguration.Configure(WebApiConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);

请注意 RegisterAllAreas() 应该在注册路由之后的一件事。IE。RouteConfig.RegisterRoutes(RouteTable.Routes);应该在之前AreaRegistration.RegisterAllAreas();。我已经尝试和测试过,它对我有用。

欲了解更多信息:在此处输入链接描述

于 2018-09-11T07:13:20.573 回答
0

确保在项目属性 > Web > Start Action > if a specific page | 行动 | url 已定义,它确实与映射路由匹配。

于 2015-10-10T12:06:30.563 回答