2010-02-09 71 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.

相关问题