Я столкнулся с проблемой, связанной с тем, как работают вспомогательный метод действия и маршрутизация.Я создал вспомогательный метод для создания поисковых ссылок
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" }
);
Теперь, когда я вызываю SearchLink из любого действия, как с параметрами эквалайзера.Url.SearchLink ("asp.net", "", 0), это дает мне правильный URL-адрес как /asp.net-jobs
Но если вызвать тот же метод из действия Index SearchController с теми же параметрами, это даст мне/asp.net-jobs-in-
Хотя я могу добиться правильного поведения (спасибо Крейгу за то, что он дал подсказку ), используя RouteUrl вместо Action в вышеуказанном методе расширения, но я хочу понять,почему это происходит.
Заранее спасибо