2011-11-13 9 views
3

私は、ユーザーURLを実際のURLにルーティングするために、グローバルファイルにRegisterRoutesメソッドを使用しています。ご想像のとおりMVC 3 - ActionLink

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

ブログコントローラと詳細はその作用です。

したがって、次のコードでは、自分の欲望のURLが生成されず、そのURLにdpという単語が含まれています。 ところで、私は自分のアクション名を変更したくありません。

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

事前に感謝;)

+0

URLルートは正しくありますか? 'http:// site/blog/dp/1200'というURLを入力すると正しいページにルーティングされますか?同じコントローラにマップする他のルートはありますか?質問にすべてのルートを含めると役立つかもしれません。 –

+0

これは正しいページにルーティングされます;)私の問題は、アクションリンクがこの "http:// site/Blog/Details?id = 1200"を生成することです。 –

答えて

3

ActionLinkを使用する代わりにRouteLinkを使用できます。

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

RouteLink方法の詳細を

MSDNで見つけることができます:RouteLinkでは、明示的にルート名を渡すことができます。並べ替えのルートは仕事をすることができますが、それはかなり壊れやすいメカニズムです。

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、タグを使用してこの問題を回避できることを知っています。 –

関連する問題