疑难解答“无法找到资源”。错误

时间:2011-07-02 01:24:13

标签: asp.net-mvc-3 mvccontrib

我有一个内置了几个区域的MVC 3应用程序,其中一个区域是我网站的管理部分。一切都很好。我想尝试使用MvcContrib Portable Areas来使我的应用程序更加模块化,所以我安装了MvcContrib,经过一些试验和错误后,我开始运行了几个便携式区域。

然后我决定将我的管理区域移动到便携区域,因此我创建了新项目并删除了我的管理员便携区域。我不得不重命名我的本地管理区域,以免它发生冲突。在将一些代码移动到Admin PA的同时,我决定不想将所有Telerik和我连接到管理区域的其他内容移动到头痛。所以我将事情移回主项目区域并删除了Admin PA。

我重新管理了我的管理区域并查看了设置区域所涉及的所有内容。现在,对于我的生活,我无法在我的主项目中加载任何区域。我一直得到“资源无法找到”。错误信息。

我甚至删除了对MvcContrib和Portable Areas的引用,但仍然没有运气。因为我不知道如何调试这个,所以我已经走到了尽头。我使用了自定义路由处理程序以及Glimpse,但在抛出错误时它们都没有用。

这是我的global.asax

中的路线
routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
            null,
            new string[] { "CoolProject.Web.Controllers" }
        );

这是我的管理区域注册文件中的路由

context.MapRoute(
            "Admin_default",
            "Admin/{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            new string[] { "CoolProject.Web.Areas.Admin.Contollers" }
        );

这是我的Global.asax

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

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
            new string[] { "CoolProject.Web.Controllers" }
        );

    }

    protected void Application_Start() 
    {

        AreaRegistration.RegisterAllAreas();
        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
        InitializeContainer();
        AppStart_Structuremap.Start();

        SiteMapManager.SiteMaps.Register<XmlSiteMap>("AdminNavigation", sitemap => sitemap.LoadFrom("/Areas/Admin/AdminNavigation.sitemap"));

    }

我已经针对类似的工作站点检查了我的设置,除了命名空间和类之外,一切都是一样的。

我正在开发Win 7 IIS7.5

使用Glimpse Routes插件我可以看到路由存在,但问题是我的Global.axas文件中的路由正在接管对这些区域的所有请求。

我的路线需要做什么才能让核心应用和相关区域相处?有趣的是我有另一个生产应用程序使用的工作区域很好。

...更新

我创建了一个新的MVC 3项目,添加了一个名为Admin的区域。然后我编辑了AdminAreaRegistration.cs和Global.asax文件,在MapRoute语句中包含命名空间,编译它并完美运行。我可以毫无问题地进入该区域。

然后我将Global.asax和AdminAreaRegistration.cs与我破坏的项目中的文件进行了比较,它们是相同的。这不是我如何设置我的路线的问题,我认为还有另一个我没有看到的问题。

2 个答案:

答案 0 :(得分:3)

你在打电话吗

AreaRegistration.RegisterAllAreas();

在Global.asax中的Application_Start上?你用什么服务器开发Cassini,IISExpress,IIS?

在查看更详细的信息后进行编辑。

如果您有此代码,请在您的管理区域注册文件中

context.MapRoute(
        "Admin_default",
        "Admin/{controller}/{action}/{id}",
        new { controller = "Home", action = "Index", id = UrlParameter.Optional },
        new string[] { "CoolProject.Web.Areas.Admin.Contollers" }
    );

我认为“CoolProject.Web.Areas.Admin.Contollers”中存在拼写错误,它应该是“CoolProject.Web.Areas.Admin.Controllers”吗?

答案 1 :(得分:1)

确保控制器中的命名空间正确无误。例如,如果您通过从另一个MVC应用程序复制MVC组件来创建新区域(就像我一样),很容易忘记更改命名空间!