我遇到了一个与辅助Action方法和路由如何工作有关的问题。我创建了一个帮助方法来创建搜索链接
public static string SearchLink(this System.Web.Mvc.UrlHelper helper, string key, string loc, int p)
{
key = Tools.GetLinkRewrite(key.Trim().ToLower());
loc = Tools.GetLinkRewrite(loc.Trim().ToLower());
string url = "";
if (!String.IsNullOrEmpty(key) && !String.IsNullOrEmpty(loc))
{
if (p > 0)
url = helper.Action("Index", "Search", new { keyword = key, location = loc, page = p });
else
url = helper.Action("Index", "Search", new { keyword = key, location = loc });
}else
if (!String.IsNullOrEmpty(key))
{
if (p > 0)
url = helper.Action("Index", "Search", new { keyword = key, page = p });
else
url = helper.Action("Index", "Search", new { keyword = key });
}else
if (!String.IsNullOrEmpty(loc))
{
if (p > 0)
url = helper.Action("Index", "Search", new { location = loc, page = p });
else
url = helper.Action("Index", "Search", new { location = loc });
}else
url = helper.Action("Index", "Search");
return url.Replace("%20","+");
}
这是我的路线
routes.MapRoute(
"Search",
"{keyword}-jobs-in-{location}",
new { controller = "Search", action = "Index" }
);
routes.MapRoute(
"Searchlocation",
"jobs-in-{location}",
new { controller = "Search", action = "Index" }
);
routes.MapRoute(
"Searchkeyword",
"{keyword}-jobs",
new { controller = "Search", action = "Index" }
);
现在,当我使用参数eq从任何动作调用SearchLink时。 Url.SearchLink(“asp.net”,“”,0),它给我正确的网址为/asp.net-jobs
但是如果使用相同的参数从SearchController的Index动作调用相同的方法,它会给我/asp.net-jobs-in -
虽然我可以通过在上面的扩展方法中使用RouteUrl而不是Action来实现正确的行为(感谢Craig给予hint),但我想理解为什么它会受到攻击。
提前致谢
答案 0 :(得分:0)
您的路线定义中不存在问题吗? 现在他们的定义方式,我无法让它发挥作用 由于您没有为它们定义{controller}或{action}占位符,因此它将始终使用SearchController及其方法Index;然而,您在助手功能(搜索,搜索关键字和搜索位置)中定义了其他操作。当我相应地改变路线时,我在整个应用程序中都没有问题@ Url.SearchLink(“key1”,“”,0)返回/ key1-作业..