【问题标题】:Adding new pages to MVC 3 project results in "Resource not found" error向 MVC 3 项目添加新页面会导致“找不到资源”错误
【发布时间】:2012-10-17 19:08:23
【问题描述】:

我有一个现有的 MVC 3 项目,我已经从事了一段时间。今天我决定添加一个新页面。我添加了一个新视图,将它与现有控制器上的操作结果连接起来,但没有骰子。我得到一个 404。我认为视图可能有问题,所以我在控制器中做了一个 response.write(将视图排除在等式之外)。没有骰子。我尝试创建一个新控制器。一样。我尝试移动现有页面。一样。所有现有页面都可以工作,但我无法添加新页面或移动现有页面。我的键盘被头发覆盖。请帮忙。

我的 global.asax:

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
    }

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

        routes.MapRoute(
            "Home",
            "",
            new { controller = "Home", action = "Index" }
        ); 
    }

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
    }

我要添加的视图是 /Views/Restaurants/Nearby。

控制器是/Controllers/RestaurantsController,ActionResult 是:

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

【问题讨论】:

  • 您使用什么 URL 访问该页面?
  • 你是如何解决这个问题的?我有同样的问题,向 Home 控制器添加了新的 Action(也是一个视图),并且新创建的页面不再起作用。

标签: asp.net-mvc asp.net-mvc-3


【解决方案1】:

首先从您的路线定义中删除以下无用的行:

routes.MapRoute(
    "Home",
    "",
    new { controller = "Home", action = "Index" }
);

这样你就只有默认的路由设置了:

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

    routes.MapRoute(
        "Default",
        "{controller}/{action}/{id}",
        new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

现在,为了访问您的新控制器操作,您需要导航到 /Restaurants/Nearby。这将在Restaurants 控制器上呈现Nearby 操作:

public class RestaurantsController: Controller
{
    public ActionResult Nearby()
    {
        return View();
    }
}

这显然会执行~/Views/Restaurants/Nearby.cshtml 视图。

【讨论】:

  • 感谢您的快速回复,但这不起作用。此网址:localhost:36472/Restaurants/Nearby 返回 404。
  • @dhyasama,使用默认向导启动一个新的 ASP.NET MVC 3 应用程序。完全按照我在~/Controllers/RestaurantsController.cs 中的答案添加RestaurantsController。然后添加一个对应的~/Views/Restaurants/Nearby.cshtml 视图。按 F5 运行您的项目并导航到 /Restaurants/Nearby
  • 那行得通。知道什么可能导致原始项目中的问题吗?我宁愿不将整个项目复制到一个新项目中。另外,我想获得更深入的了解,而不仅仅是继续前进。再次感谢。
  • @dhyasama,不知道。我不熟悉您现有的项目,也不熟悉它包含的内容。你只展示了它的一小部分,我已经向你展示了如何让它发挥作用。现在,如果它仍然不起作用,那么您的代码的其他部分可能会发生其他事情,不幸的是我无法猜测。
【解决方案2】:

我知道这是一个旧线程,但我发现许多“找不到资源”的解决方案对我没有帮助。一段时间后,我解决了我的问题。希望它会帮助别人。

问题是我一直在搞乱部署我的应用程序,所以我的项目恰好设置为“发布”配置。我还更改了发布配置以编译到不同的文件夹。

所以我认为当我在工具栏中点击“运行”时,它会选择一个较旧的 DLL 并从中运行。

我只花了三个小时,所以我很高兴。

【讨论】:

  • 不完全是我的问题,但它为我指明了正确的方向并节省了我的时间。实际上我的主项目根本没有编译,因为我以某种方式取消了配置管理器中的构建复选框。
【解决方案3】:

您可以尝试添加 Route Debugger NuGet 包 IIRC,

Get-Package routedebugger

如果需要,更改您的 web.config 条目以激活所有请求的路由调试器:

<add key="RouteDebugger:Enabled" value="true" />

然后您应该构建并运行您的项目,然后导航到/Restaurants/Nearby/。生成的诊断应该告诉您您的路由问题(如果有)在哪里。如果您仍然遇到问题,请使用路线调试信息编辑您的帖子,我们会看看我们能做些什么!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多