2012-01-04 10 views
0

誰もがASP.Netルーティング(MVC 3用)で次の作業を行う方法を提案できますか?MVCのASP.Netルートの値を組み合わせる

私は、コントローラを決定する値が実際のページのIDの一部であるURLを持つようにしたい:

/{id}-{controller}/{action}/{further-values} 

をしかし、私は同様に、コントローラに使用される値が含まれるようにid値を必要とし、私たちは、次のURL持っている場合は、上記の中:

/chelsea-football-team/view/2010-2011 

は私が{ID}値は、理想的には、「チェルシー・フットボール・チーム」には、コントローラがあることを、「フットボール・チーム」になりたいと、アクション追加の値は "2010-2011"となるようにする必要があります。

コントローラ値がルート定義にハードコードされているいくつかのルートを持つことに問題はありませんが、いくつかのコントローラ値を持つことができる必要があります。

私はコントローラの値を単純に組み合わせることができますが、これは追加の繰り返しコードをたくさん追加することを意味します。これは他の方法でも達成可能ですか?

なぜ私はこれをしたいですか?私はチーム名を完全に持つ必要があるので、チーム名の一部はコントローラ名と常に一致するので、なぜそれらをルートに組み合わせないのですか?

+0

'{*さらに値} 'にする必要はありませんか?あなたはあなたのアクションメソッドでハイフネーションされた引数を作成できないので? – danludwig

+0

実際にコードを動作させるのではなく、Imの後ろのものをそのまま表現しています。 – Moo

答えて

1

理想的には "chelsea-football-team"、コントローラは "football-team"、アクションは "view"、追加値は "2010- 2011年標準のルーティングの実装を使用して、単一のパラメータ、変数(ID)の両方を表すように、URLやコントローラで経路パラメータを組み合わせることができないコメント1

...MapRoute(null, "{id}/{action}/{*furtherValues}", 
     new { 
      controller = "FootballTeam", 
     }); 

更新。あなたがidを "chelsea-football-team"にしたいのであれば、それは自己完結型のルートパラメータでなければなりません。 MVCがIDからコントローラ名を抽出する方法で結合することはできません。

この要件を満たすために、カスタムRouteBase実装を作成する必要がある場合があります

public class MyCustomRoutingPattern : RouteBase 
{ 
    public override RouteData GetRouteData(HttpContextBase httpContext) 
    { 
     // do your coding and return an instance of RouteData 
    } 
} 

あなたがそのようにようにそれを使用します。あなたのRouteBaseの実装は、その後から、コントローラを抽出することができます

routes.Add(new MyCustomRoutingPattern(
    "{id}/{action}/{*furtherValues}")); 

idパラメータSteve SandersonとAdam Freemanの「Pro ASP.NET MVC3 Framework」には、RouteBaseクラスをオーバーライドする方法のセクションがあります。

+0

いいえ、私が1つのコントローラに制限するので、URLで使用されるコントローラを定義したりヒントしたりする必要があるときです。答えtho :)ありがとう – Moo

関連する問題