【问题标题】:ASP.NET MVC can't find route programmaticallyASP.NET MVC 无法以编程方式找到路由
【发布时间】:2008-11-07 14:08:21
【问题描述】:

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

routes.MapRoute(
    "Home", // Unique name
    "", // Root url
    new { controller = "Home", action = "Index", 
        tag = string.Empty, page = 1 }
);

kewl。当我启动网站时,它会正确选择这条路线。

现在,当我尝试以编程方式执行以下操作时,它返回 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

为什么会这样?

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

更新

仍然没有运气。另外,使用 MVC RC,我现在需要将 viewContext 更改为 veiwContext.RequestContext .. 编译但我仍然得到一个空结果。

更新 2

当我有没有page=1 默认项的路线时,路线已找到。 例如。

routes.MapRoute(
        "Home",
        "",
        new { controller = "Post", action = "Index", tags = string.Empty }
    );

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

【问题讨论】:

  • 我也有这个问题,用 asp.net-mvc3 和 razor。

标签: asp.net-mvc global-asax routes


【解决方案1】:

它返回 null 的原因是因为没有带有“页面”路由数据的路由。

您能稍微扩展一下您想要实现的目标吗?如果你想重定向到带有 /page/2 或 /?page=2 url 的页面,那么你应该使用 RedirectToRoute 或 RedirectToAction:

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

【讨论】:

  • 我不能使用 RedirectToRoute 或 RedirectToAction 的原因是因为我试图以 proramatically 生成一些 代码。我真的不想去那个页面,但要确定去那个页面的 HTML。
【解决方案2】:

我觉得你的路线应该是这样的:

route.MapRoute("theRoute", "{controller}/{action}/{tag}/{page}",
  new { controller="Post", action="Index", tag="", page=1 });

或者(取决于完整的 URL 应该是什么样子)...

route.MapRoute("theRoute", "/{tag}/{page}",
  new { controller="Post", action="Index", tag="", page=1 });

这仍然会匹配到http://mysite.com/ 的请求,并转到上面定义的默认路由值。但是现在当你指定一个标签或页面时,你会得到你想要的 url。

【讨论】:

    【解决方案3】:

    您应该查看 Phil 的 Route Tester:

    ASP.NET Routing Debugger

    【讨论】:

    • 我一直在使用它,但它没有帮助 :( 真的很奇怪!标签总是 string.empty 并且页面总是 1 :(
    猜你喜欢
    • 2015-05-16
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 2018-02-26
    • 2010-11-25
    相关资源
    最近更新 更多