【问题标题】:MVC 3 - ActionLinkMVC 3 - 动作链接
【发布时间】:2011-12-28 04:41:47
【问题描述】:

我在 Global 文件中使用 RegisterRoutes 方法将用户 url 路由到实际 url。

routes.MapRoute("Blog", 
                "blog/dp/{id}", 
                 new { controller ="Blog", action = "Details" });

您可能已经猜到了,Blog 是控制器,Details 是它的操作。

所以问题是下面的代码不会生成我想要的 URL,它的 URL 中有 dp 字样。 顺便说一句,我不想​​更改我的操作名称。

@Html.ActionLink( "headline", "Details", "Blog", new { id="1200" }, null )

提前致谢;)

【问题讨论】:

  • url 路由是否正确?如果您输入网址http://site/blog/dp/1200,它会路由到正确的页面吗?你还有其他映射到同一个控制器的路由吗?在您的问题中包含所有路线可能会有所帮助。
  • 是的,它路由到正确的页面;)我的问题是操作链接生成了这个“site/Blog/Details?id=1200

标签: asp.net-mvc model-view-controller routes


【解决方案1】:

您可以使用 RouteLink 而不是 ActionLink。在 RouteLink 中,您可以显式传递您的路线名称:

@Html.RouteLink("headline", "Blog", new { controller = "Blog", action = "Details" })

更多关于 RouteLink 方法的信息可以在MSDN 中找到。重新排序路线可以完成这项工作,但这是一个相当脆弱的机制。

【讨论】:

    【解决方案2】:

    ActionLink 使用的路径可能与您在问题中提供的路径不同。你有在这之前声明的路线吗?

    路由按照您提供的顺序进行匹配。所以,例如,如果你有类似的东西:

    routes.MapRoute("Blog", 
                    "blog/dp",       // {id} is not provided in this one
                     new { controller ="Blog", action = "Details" });
    

    在这条路线之前声明:

    routes.MapRoute("Blog", 
                    "blog/dp/{id}", 
                     new { controller ="Blog", action = "Details" });
    

    首先匹配第一条路由,您会看到 /blog/dp/?id=1200 而不是 /blog/dp/1200。

    【讨论】:

    • 感谢您的回答,但我的 MapRoutes 工作正常,我的问题是 actionlink 不能在提到的场景中使用。顺便说一句,我知道我可以使用 标签绕过这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多