请查看详情:
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
错误:“/”应用程序中的服务器错误。
无法找到资源。
为什么会出现此错误?
答案 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。