RouteTable.Routes.GetVirtualPath()在ASP.NET MVC中返回错误的路由

时间:2011-01-10 21:13:46

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

我有以下路线:

// pennames
routes.MapRoute(
    "pennames", // Route name
    "MyHome/Authors/{action}/{id}", // URL with parameters
    new { controller = "Author", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);

// article
routes.MapRoute(
    "article", // Route name
    "MyHome/Articles/{action}/{id}", // URL with parameters
    new { controller = "Article", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);

// index
routes.MapRoute(
    "MyHome", // Route name
    "MyHome/{action}/{id}", // URL with parameters
    new { controller = "MyHome", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);

我正在尝试在我的“MyHome / Articles /”视图中添加分页功能。寻呼机使用以下代码获取URL:

var virtualPathData = RouteTable.Routes.GetVirtualPath(this.viewContext.RequestContext, pageLinkValueDictionary);

if (virtualPathData != null)
{
    string linkFormat = "<a href=\"{0}\">{1}</a>";
    return String.Format(linkFormat, virtualPathData.VirtualPath, linkText);
}
else
{
    return null;
}

问题是,虽然我从“MyHome / Articles /”页面运行此代码,GetVirtualPath总是返回第一条路线“MyHome / Authors /”并完全忽略前缀“MyHome / Articles /”在路线上。

当我使用ActionLink时,它工作正常,而不是来自GetVirtualPath

有什么想法吗?

感谢。

1 个答案:

答案 0 :(得分:0)

如果您想将分页应用于MyHome / Articles

您可以提供类似

的硬编码路径

yourpath =“MyHome / Articles?page =”+ page_number;

并且每次必须从视图接收页面参数时,该分页助手可用于查看或使用&lt;%= Html.ActionLink()%&gt;并在此范围内传递routes参数。