使用UrlHelper.Action的Asp.net MVC 3路由问题

时间:2011-09-06 19:28:11

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-routing

我遇到了一个与辅助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),但我想理解为什么它会受到攻击。

提前致谢

1 个答案:

答案 0 :(得分:0)

您的路线定义中不存在问题吗? 现在他们的定义方式,我无法让它发挥作用 由于您没有为它们定义{controller}或{action}占位符,因此它将始终使用SearchController及其方法Index;然而,您在助手功能(搜索,搜索关键字和搜索位置)中定义了其他操作。当我相应地改变路线时,我在整个应用程序中都没有问题@ Url.SearchLink(“key1”,“”,0)返回/ key1-作业..