2010-02-09 82 views
3

我想要乾淨的網址,並定義了兩個途徑:路線沒有得到解決

routes.MapRoute(
    "Search", 
    "Search", 
    new { controller = "Search", action = "SearchPanel" } 
); 
routes.MapRoute(
    "SearchResults", 
    "Search/{content}", 
    new { controller = "Search", action = "Search", content = string.Empty, query = string.Empty, index = 0 } 
); 

然後我有兩個動作:

[HttpPost] 
public ActionResult Search(string content, string query) 
{ 
    if (string.IsNullOrEmpty(query)) 
    { 
     return RedirectToAction("Home", "Application"); 
    } 
    return RedirectToAction("Search", new { content = content, query = query }); ; 
} 

public ActionResult Search(string content, string query, int? index) 
{ 
    if (string.IsNullOrEmpty(query)) 
    { 
     return RedirectToAction("Home", "Application"); 
    } 

    switch (content) 
    { 
     case "products": 
      // get products 
      return View("ResultsProducts"); 
     case "categories": 
      // get categories 
      return View("ResultsCategories"); 
     default: 
      // get all 
      return View("ResultsAll"); 
    } 
} 

我有我的母版頁的通用搜索麪板具有文本框和提交按鈕。它張貼到/Search。文本框的名字是query。一切都很好,很棒。當我點擊Search我的第一個動作得到執行,但在RedirectToAction()上失敗請致電:

路由表中沒有路由與提供的值匹配。

我似乎無法找到它不起作用的原因。

回答

2

從第二條路線的默認值中刪除content,queryindex,解決了問題。爲什麼我不能說真話,因爲那些只是定義了默認值,當它們沒有被提供時,在我的情況下並非如此。無論如何,我都提供這些值。

+0

我有一個類似的問題後,更新到MVC的第2版。我可以導航到指定URL的頁面,但是如果我嘗試使用RedirectToAction(「ActionName」),我得到了同樣的錯誤:「路由表中沒有路由....」在我的情況下,我最終複製了路由條目正在使用URL並刪除了其他參數,現在RedirectToAction也可以使用。很奇怪....但謝謝你的提示。 – Rick 2010-06-28 22:14:54

2

我有同樣的問題,幸好這幫助了我,所以我想回饋一些東西。

似乎MVC 2框架中有一個變化,這迫使你以不同的方式聲明路線。

爲了有額外的路由值出現(如內容),你必須不分配的String.Empty默認的,而是有

content = UrlParameter.Optional 

然後,這應該讓你的路線評估的行爲就像它在MVC 1.