Проблема маршрутизации Asp.net MVC 3 с UrlHelper.Action - PullRequest
0 голосов
/ 06 сентября 2011

Я столкнулся с проблемой, связанной с тем, как работают вспомогательный метод действия и маршрутизация.Я создал вспомогательный метод для создания поисковых ссылок

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 в вышеуказанном методе расширения, но я хочу понять,почему это происходит.

Заранее спасибо

1 Ответ

0 голосов
/ 10 сентября 2011

Не является ли проблема в вашем определении маршрута? То, как они определены сейчас, я не мог заставить его работать.
Поскольку для них не определен ни заполнитель {controller}, ни {action}, он всегда будет использовать SearchController и его метод Index; тем не менее, вы определяете другие действия в своей вспомогательной функции (Поиск, Searchkeyword и Searchlocation). Когда я соответственно изменил маршруты, у меня не было никаких проблем @ Url.SearchLink ("key1", "", 0) return / key1-jobs во всем моем приложении.

...