无法找到该资源。在mvc中的RouteConfig

时间:2014-09-14 01:41:38

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

请查看详情:

RouteConfig类:

public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new {controller = "Home", action = "Index", id = UrlParameter.Optional}
                );
            routes.MapRoute(
                name: "Templates",
                url: "templates/{controller}/{template}",
                defaults: new { action = "Template" }
                );
        }
    }

TeamsController:

  public class TeamsController : Controller
    {
        public ActionResult Template(string template)
        {
            switch (template.ToLower())
            {
                case "list":
                    return PartialView(Url.Content("~/Views/Teams/List.cshtml"));
                case "add":
                    return PartialView(Url.Content("~/Views/Teams/Add.cshtml"));
                case "delete":
                    return PartialView(Url.Content("~/Views/Teams/Delete.cshtml"));
                case "edit":
                    return PartialView(Url.Content("~/Views/Teams/Edit.cshtml"));
                case "detail":
                    return PartialView(Url.Content("~/Views/Teams/Detail.cshtml"));
                default:
                    throw new Exception("template not known");
            }
        }
    }

网址请求:http://localhost:1533/templates/teams/add

错误:“/”应用程序中的服务器错误。

无法找到资源。

为什么会出现此错误?

1 个答案:

答案 0 :(得分:0)

尝试在RouteConfig.cs文件中重新排序您的路线,如下所示:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.MapRoute(
            name: "Templates",                          //move custom routes above default routes
            url: "templates/{controller}/{template}",
            defaults: new { action = "Template" }
            );

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

我在这里提供你的问题的一个小解释,以便你可以很容易地理解,看看我们运行我们的mvc应用程序然后在global.asax文件中生成路由表,在那里你注册你的路由,以便你的路由默认路线将首先注册,默认路线将优先于您的自定义路线,因此它始终建议将自定义路线放在默认路线上方,如我的回答所示。

关于MVC路由常见错误的一篇好文章是here