2015-09-18 41 views
0

我有一个未来的路线:asp.net路线行不通

routes.MapRoute(
    "CatalogFilter", 
    "{url}Catalog.aspx/{fltr}", 
    new { controller = "Catalog", action = "Index", page = 1 } 
); 

所以链接不匹配路线:中http://localhost:63515/MotorOilCatalog.aspx?fltr=156代替http://localhost:63515/MotorOilCatalog.aspx/156

我试图删除所有其他路线,以确保没有明确或冲突的路线,但它也不起作用。

我安装菲尔Haacks“路线调试器”,它显示: list of routes

+0

你是不是想航线的URL到控制器,或ASP.NET页? – NightOwl888

+0

@ NightOwl888,我正在尝试路由该网址。参数'fltr'总是为'null',链接与路由不匹配。 – mykhailovskyi

回答

0

为了建立这条路线相匹配的链接:

routes.MapRoute(
    "CatalogFilter", 
    "{url}Catalog.aspx/{fltr}", 
    new { controller = "Catalog", action = "Index", page = 1 } 
); 

您需要指定所有存在于路线值路线。你有5个值:

  1. 控制器
  2. 行动
  3. 网址
  4. FLTR

所以,你需要提供所有5个值,以匹配从ActionLink的路线。如果你想生成的URL /MotorOilCatalog.aspx/156,你必须做出ActionLink这样的:

@Html.ActionLink("my link", "Index", "Catalog", new { page = 1, fltr = 156, url = "MotorOil" }, null) 

请注意,您有它的配置方式,从URL重写页码的唯一途径是将其添加到查询字符串。

/MotorOilCatalog.aspx/156?page=2

由于您的问题不清楚,我假设,当然,这是一个MVC应用程序,你必须在一个Index方法您的应用程序Catalog控制器。

public class CatalogController : Controller 
    public ActionResult Index(string url, int fltr, int page) 
    { 
     // Implementation 

     return View(); 
    } 
} 

如果这其实就是一个ASP.NET应用程序,你应该使用MapPageRoute,而不是MapRoute建立你的路线将它们映射到物理页,而不是控制器。

参考:https://msdn.microsoft.com/en-us/library/cc668177.aspx

+0

感谢您的回复。它是一个MVC应用程序(路径中仅用于支持旧链接的.aspx)。目录/索引有4条路线:每条路线用于不同数量的输入参数。 ActionLink的视图看起来像你的建议,但它不起作用。 – mykhailovskyi

+0

请张贴您的配置中的所有路线。最有可能的是,另一条路线在此路线之前是匹配的(即,当所有这些路线值都通过时,它匹配)。在配置中注册的第一条路线总是胜。 – NightOwl888

+0

确实,第一条匹配的路线胜出,但我试过评论所有路线,除了我发布的问题和默认路线之外。即使我的自定义路线是最高的,但默认路线是匹配的,而不是我的期望。 – mykhailovskyi