Asp.net mvc ASP.NET MVC可以';无法通过编程方式查找路由

Asp.net mvc ASP.NET MVC可以';无法通过编程方式查找路由,asp.net-mvc,global-asax,routes,Asp.net Mvc,Global Asax,Routes,我有以下一条路线,在我的global.asax中注册 routes.MapRoute( "Home", // Unique name "", // Root url new { controller = "Home", action = "Index", tag = string.Empty, page = 1 } ); 基尔。当我启动站点时,它正确地选择了这条路线 现在,当我尝试以编程方式执行以下操作时,它返回NULL var pageLinkVal

我有以下一条路线,在我的global.asax中注册

routes.MapRoute(
    "Home", // Unique name
    "", // Root url
    new { controller = "Home", action = "Index", 
        tag = string.Empty, page = 1 }
);
基尔。当我启动站点时,它正确地选择了这条路线

现在,当我尝试以编程方式执行以下操作时,它返回NULL

var pageLinkValueDictionary = 
    new RouteValueDictionar(linkWithoutPageValuesDictionary)
        {{"page", 2}};

VirtualPathData virtualPathData = 
    RouteTable.Routes.GetVirtualPath(viewContext, "Home"
        pageLinkValueDictionary);

// NOTE: pageLinkValueDictionary == 
//     Key: Action, Value: Index; Key: page, Value: 2
为什么会发生这种情况

我的印象是,它会找到主路由,但会附加任何未找到的值作为查询字符串项

更新 还是不走运。另外,使用,我现在需要将viewContext更改为veiwContext.RequestContext。。它编译了,但我仍然得到一个空结果

更新2 当我的路线没有
page=1
默认项时,就会找到路线。 例如


。。和
RouteTable.Routes.GetVirtualPath
返回一个
VirtualPathData
实例。当我将
page=1
(默认值)添加回时,返回的
VirtualPathData
实例为null?

它返回null的原因是没有包含“页面”路由数据的路由

你能不能把你想要达到的目标再扩大一点?如果要重定向到url/page/2或/?page=2的页面,则应使用RedirectToRoute或RedirectToAction:

return RedirectToRoute("IndexDefault", new {page = "2"}); 

我认为你的路线应该是这样的:

route.MapRoute("theRoute", "{controller}/{action}/{tag}/{page}",
  new { controller="Post", action="Index", tag="", page=1 });
或者(取决于完整URL的外观)


这仍然会匹配到请求,并转到上面定义的默认路由值。但是现在,当您指定标记或页面时,您将获得所需的url。

您应该查看Phil的Route Tester:


我一直在使用它,但它没有任何帮助:(这真的很奇怪!标签总是字符串。空的,页面总是1:(我无法使用RedirectToRoute或RedirectToAction的原因是,我正试图以程序方式生成一些代码。我并不真的想转到该页面,但要确定转到该页面的HTML。asp.net-mvc3和razor也存在此问题。
route.MapRoute("theRoute", "{controller}/{action}/{tag}/{page}",
  new { controller="Post", action="Index", tag="", page=1 });
route.MapRoute("theRoute", "/{tag}/{page}",
  new { controller="Post", action="Index", tag="", page=1 });