2011-01-06 13 views
2

私はルーティングに関してかなり独特の問題があります。この場合、DefaultルートがHtml.ActionLinkを使用して動作しないのはなぜですか?

は年のためにそれ用の設定を気にすることないの後、私はデフォルトルートを使用していますバックのルーティングに来るとリソースのためのルートを無視:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

routes.MapRoute(
     "Default", 
     // Route name 
     "{controller}/{action}/{id}", 

     // URL with parameters 
     new 
     { 
      controller = "Home", 
      action = "Index", 
      id = UrlParameter.Optional 
     }); 

私はIndexのためのアクションでRulesControllerを持っており、 Views> RulesディレクトリのLoremIndex.aspxLorem.aspx

私はmaseterページにルール/インデックスを目的としたActionLinkのを持っている:

<li><div><%: Html.ActionLink("linkText", "Index", "Rules")%></div></li> 

リンクがhttp://localhost:12345/Rules/としてレンダリングされていると私はURLにIndexを入力すると404

を取得していますアプリケーションはそれをアクションにルーティングします。

私は"Index"から"Lorem"へのデフォルトルートのアクションを変更

は、アクションリンクは、それがもはやデフォルトルートと正しくindexアクションへのアプリケーションのルート上だとして Indexを添加しない http://localhost:12345/Rules/Indexとしてレンダリングされています。

私はPhil Haack's Routing Debuggerを使用しましたが、URL http://localhost:12345/Rules/に入るとそれも404を使用しています。

私はルーキーミス、関連するSOの質問と基本的なRTFMをすべてカバーしていると思います。

私は、 "ルール"はルーティングの予約語ではないと仮定しています。 ルートを更新してそれらをデバッグする以外に、どうすれば見えますか?

+1

IgnoreRoutesが定義されていますか?あなたは偶然あなたのウェブサイトのディレクトリに 'Rules'というフォルダを持っていますか? –

+1

私はデフォルトの無視経路(今質問に追加されている)とフォルダにはいを持っています。建築家はBusiness Objects用の別のプロジェクトを作成していないため、そこには「Rules」フォルダがあります。私は再編成してテストします。そのような場合は、このコメントを回答として追加してください。 – StuperUser

+0

ブーム。ありがとうナタン。 – StuperUser

答えて

2

あなたのウェブサイトと同じディレクトリに「ルール」という名前のフォルダがないことを確認してください。デフォルト設定では、ASP.NET MVCルートは、ルート定義の前に物理パスを尊重します。 Webサイト内の物理フォルダへのパスと一致するルートが定義されている場合、ルーティングエンジンは完全にバイパスされます。

あなたはfalseRouteTable.Routes.RouteExistingFilesプロパティを変更することにより、物理パスへのルーティングを無効にすることができますが、この操作を行うと、アプリケーションが(たとえばなどの画像、スクリプト、スタイルシート、など)の物理リソースへのパスを持っている場合は、それらに対処する必要があります。一致するIgnoreRoute()定義を持つパス 例:RouteTable.Routes.IgnoreRoute("content/{*pathInfo}");

+0

ありがとうナタン、第2段落は特に興味深く便利です。 – StuperUser

関連する問題