2015-09-18 73 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