向MVC 3项目添加新页面会导致“找不到资源”错误

时间:2011-09-01 19:17:11

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

我有一个我已经工作了一段时间的现有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();
    }

3 个答案:

答案 0 :(得分:3)

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

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。这将在Nearby控制器上呈现Restaurants操作:

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

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

答案 1 :(得分:1)

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

问题是我一直在搞乱部署我的应用程序,所以我的项目恰好被设置为'Release'配置。我还修改了发布配置以编译到另一个文件夹。

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

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

答案 2 :(得分:0)

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

Get-Package routedebugger

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

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

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