我有一个其他人已经开发过的应用程序,它最初是一个包含多个部分的Web.forms应用程序,并且正在转换为MVC。有两个部分已经进入MVC,一个工作正常,但另一个我有路由问题。
该路线在.cshtml中显示为:
<a href="@Url.RouteUrl("TableDetails", new { id=testTable.theId })@Request.Url.Query">Test Table</a>
该项目是带有名为Areas&gt;的文件夹的Web表单。 TableProject&gt;控制器和与mvc项目相关的其他文件夹。在控制器中是一个HomeController.cs,它具有:
[HttpGet]
[Route("{id:int}/{seId:int?}", Name = "TableDetails")]
public ActionResult TableDetails(int id, int? seId)
{
// code
}
路径文件是这样的:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.RouteExistingFiles = false;
routes.IgnoreRoute("anotherproject/{*pathInfo}");
routes.MapPageRoute(
"WebFormDefault",
string.Empty,
"~/index.aspx");
routes.MapRoute(
"MvcDefault",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional });
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });
}
由于无法找到TableDetails路由,因此无法使表项目正常工作。另一个MVC项目工作正常。
错误是:
在路径集合中找不到名为“TableDetails”的路径。参数名称:名称
答案 0 :(得分:0)
您缺少注册属性路由的方法调用MapMvcAttributeRoutes
。这意味着您的[Route]
个属性都没有注册。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.RouteExistingFiles = false;
routes.IgnoreRoute("anotherproject/{*pathInfo}");
// Register [Route] attributes
routes.MapMvcAttributeRoutes();
routes.MapPageRoute(
"WebFormDefault",
string.Empty,
"~/index.aspx");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });
}
此外,
MvcDefault
路由阻止了对Default
路由的每次调用,使Default
成为无法访问的执行路径。有关详细信息,请参阅Why map special routes first before common routes in asp.net mvc?。