【问题标题】:Troubleshooting "The resource cannot be found." Error疑难解答“找不到资源”。错误
【发布时间】:2011-07-02 01:24:13
【问题描述】:

我有一个 MVC 3 应用程序,其中内置了几个区域,其中一个区域是我网站的管理部分。一切正常。我想尝试 MvcContrib Portable Areas 以使我的应用程序更加模块化,因此我安装了 MvcContrib,经过反复试验,我得到了几个 Portable area 并运行起来。

然后我决定将我的管理区域移动到一个便携式区域,所以我创建了新项目并删除了我的管理便携式区域。我不得不重命名我的本地管理区域,以免发生冲突。在将一些代码移到 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 与我损坏的项目中的文件进行了比较,它们是相同的。这不是我如何设置路线的问题,我认为还有另一个我没有看到的问题。

【问题讨论】:

标签: asp.net-mvc-3 mvccontrib


【解决方案1】:

你在打电话吗

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”?

【讨论】:

  • 查看我的更新,我添加了我的 global.asax、操作系统和网络服务器信息。
  • 神圣的胖手指!你成功了!我完全错过了。有时,第二双眼睛会很有帮助。这就是我们如此热爱魔术弦的原因!
  • @JBeckton 好点。在这种情况下,我通过编写以下代码来避免使用魔术字符串: new string[] { typeof(CoolProjects.Web.Areas.Admin.Controllers.HomeController).Namespace }.
  • 您可能会收到此错误的另一个原因:如果您的 root 应用程序文件夹中有一个与该区域同名的文件夹。例如:“/MyApp/Admin”。在这种情况下,您需要删除该文件夹。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多