在asp.net混合(Web窗体和mvc)应用程序中配置URL路由

时间:2018-02-27 19:33:48

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

我有一个其他人已经开发过的应用程序,它最初是一个包含多个部分的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”的路径。参数名称:名称

1 个答案:

答案 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?