2011-01-10 6 views
1

プロジェクトでは、コンテンツデータベースから取得した動的なページがあります。ただし、一部のページではさらに計算が必要になります。だから、私はそれらのための特定のコントローラ/ビューを作成するだろうと思って、彼らは存在するときにヒットするだけで、私の動的なルートはそれをキャッチし、コンテンツコントローラは指定されたルートのデータベースコンテンツを取得させます。 私は右のそれを説明願っていますが、ここではそれをもう少し説明するかもしれない、私のGlobal.asaxからいくつかのコードは次のとおりです。ASP.NET ASP 2 - ルーティングの優先順位付け?

routes.MapRoute(// Default controller actions, when not found, fall back to next route? 
        "Default",            
        "{controller}/{action}/{id}",       
        new { controller = "Home", action = "Index", id = "" } 
       ); 

routes.MapRoute(// Catch all other? (And try to find content for those) 
        "DefaultContentRoute",    
        "{ContentCategory}/{Content}",       
        new { controller = "Content", action = "Index" }, 
       ); 

これは明らかに私が得るとして「複数のタイプが一致する発見された、機能していませんコントローラーを追加するときにエラーが発生しました。 しかし、私がここでやろうとしていることを達成するための他の方法があるかどうか疑問に思っていましたか? (ルートの優先順位付け) 私は明らかに私のURLを完全に動的に保ちたいと思っています。

ありがとうございます。

答えて

1

URLが両方のルートに一致するため、ASP.NET MVCは混乱します。以下のような、より明示的なの一つを作ってみましょう:

routes.MapRoute(// Catch all other? (And try to find content for those) 
        "DefaultContentRoute",    
        "Categories/{ContentCategory}/{Content}",       
        new { controller = "Content", action = "Index" }, 
       ); 

routes.MapRoute(// Default controller actions, when not found, fall back to next route? 
        "Default",            
        "{controller}/{action}/{id}",        
        new { controller = "Home", action = "Index", id = "" } 
       ); 

これは、任意のコンテンツはURLで「カテゴリー」で始まるコンテンツを除いて、デフォルトルートを通過します保証されます。 代わりに、ルート制約を悪用し、指定されたコンテンツが存在するかどうかを確認するContentControllerルートの制約を作成することもできます。

+0

私は経路の制約を悪用することが私にとって最善の解決策であると考えました。私たちが話すときにそれを試してみてください。 (または、heheを入力してください) ありがとうございます。 – DmY

+0

すべてのリクエストに対してチェックされていると、データベースに大きな負荷がかかる可能性があるので、おそらくキャッシングを行うことに注意してください。 – maartenba

+0

注意してください。再度、感謝します。 – DmY

関連する問題