2011-11-13 57 views
3

我在全局文件中使用RegisterRoutes方法将用户网址路由到实际网址。MVC 3 - ActionLink

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

正如你可能已经猜到了,博客是控制器和详细是它的行动。

所以问题是,下面的代码不会生成我的愿望网址,其中有dp word在其url中。顺便说一句,我不想​​改变我的动作名称。

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

在此先感谢;)

+0

url路径是否正确?如果输入url http:// site/blog/dp/1200,它是否会路由到正确的页面?你有没有其他路线映射到同一个控制器?这可能有助于在你的问题中包含所有路线。 –

+0

是的,它的路由到正确的页面;)我的问题是,动作链接生成此“http://网站/博客/详细信息?ID = 1200” –

回答

3

您可以使用RouteLink而不是使用ActionLink。在RouteLink,你可以明确地传递路线名称:

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

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

1

的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" }); 

第一条路线将首先匹配,你会看到/博客/ DP/ID = 1200而不是/ blog/dp/1200。

+0

感谢您的答案,但我的MapRoutes工作正常,我的问题是, BTW,我知道我可以通过使用标签来避开这个问题。 –