8

ネストされた領域を持つプロジェクト構造を作成したいと考えています。たとえば、「ホーム」エリアがあり、その下に独自のルート登録を処理する「ニュース」エリアが必要であり、ルートが「ニュース」エリアのコントローラーを指しているときに適切にビューを検索します。「ニュース」エリア名を単に「ニュース」ではなく「ホーム/ニュース」に変更すると、適切なビューが見つかります。メインの Global.asax.cs で、すべての領域 (「ホーム」と「ニュース」) をインスタンス化し、それらを個別に登録します。 " 範囲)。

他の誰かが同様のことを試しましたか? これは重大なハッキングですか、それとも安定した長期的な解決策になる可能性がありますか? アドバイスをいただければ幸いです。

4

2 に答える 2

4

別のオープンソース CodePlex プロジェクトである MvcCodeRoutingを使用して実行できます。

MvcCodeRouting は、ASP.NET MVC アプリケーションに最適なルートを自動的に作成します。

  1. 好きなだけ深くできる名前空間 (これ以上の領域はありません) を使用してコントローラーを編成します。
  2. パラメーターごとまたはサイトごとにオーバーライドできるプリミバイト タイプのデフォルトの制約。
  3. 効率的なマッチングのための類似ルートのインテリジェントなグループ化。
  4. ルート コントローラのサポート。
  5. あいまいなルートの検出。
  6. ルートのフォーマット (例: 小文字にする)。
  7. デバッグのために、ルートを MapRoute 拡張メソッドの呼び出しとしてレンダリングします。
  8. ビューを整理するために、同じ名前空間ベースのベース ルートを使用します。
于 2011-02-24T15:06:06.087 に答える
1

コントローラーは名前空間を使用して検出されるため、コントローラーを使用してこのようなものを作成しても問題はないと思います。

問題はビューにあります。

デフォルトでは、(ViewEngine を介した) MVC ルーティングは、RouteData コレクション内の Area、Controller、および View の値のみを使用します。

これは、仮想 FindView メソッド (および非仮想 GetPath を使用) の VirtualPathProviderViewEngine に実装されます。ViewEngine で FindView メソッドをオーバーライドする必要があります。

コードの量はそれほど大きくも複雑でもありませんが、最善の方法は、ソースを調べてスヌーピングすることです。これは、キャッシングやその他のことが行われているためです...

于 2011-02-24T14:07:45.283 に答える