路线没有得到解决
问题描述:
我想要干净的网址,并定义了两个途径:路线没有得到解决
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()
上失败请致电:
路由表中没有路由与提供的值匹配。
我似乎无法找到它不起作用的原因。
答
从第二条路线的默认值中删除content
,query
和index
,解决了问题。为什么我不能说真话,因为那些只是定义了默认值,当它们没有被提供时,在我的情况下并非如此。无论如何,我都提供这些值。
答
我有同样的问题,幸好这帮助了我,所以我想回馈一些东西。
似乎MVC 2框架中有一个变化,这迫使你以不同的方式声明路线。
为了有额外的路由值出现(如内容),你必须不分配的String.Empty默认的,而是有
content = UrlParameter.Optional
然后,这应该让你的路线评估的行为就像它在MVC 1.
我有一个类似的问题后,更新到MVC的第2版。我可以导航到指定URL的页面,但是如果我尝试使用RedirectToAction(“ActionName”),我得到了同样的错误:“路由表中没有路由....”在我的情况下,我最终复制了路由条目正在使用URL并删除了其他参数,现在RedirectToAction也可以使用。很奇怪....但谢谢你的提示。 – Rick 2010-06-28 22:14:54