0

だから私はMVC3プロジェクトの構築について読んでいて、私を深刻に悩ませていることが1つあります。プロジェクトのフォルダ構造は、HTTPリクエストのパスに対応しているわけではありません。私が好きで使いたいものはたくさんありますが、フラットなフォルダー構造を持つことはそれらの1つではありません。

なぜこれが問題なのですか?ええと、コンテンツページとさまざまなフォーム/動的ページ(ほとんどのサイトはそのようなものです)が大量に混在するサイトを構築するときに問題になると思います。これは通常、さまざまな人によって行われます。クライアント側の開発者が動的ページのルーティングルールに従うことや、新しいページを作成することは複雑すぎるようです。

私が理解したいのは、MVC3アプリケーションを次のように構成する方法があるかどうかです。

  1. これは、各コントローラーの明示的なルートマップなしでコントローラーを検索するためのディレクトリ構造に従います。
  2. ビューは、対応するコントローラーと同じフォルダーにあります
  3. ルーティングマジックは、アクションとパラメーターに対して引き続き機能します

たとえば、フォルダ内/fus/ro/dah/を検索DahControllerしてそのアクションを実行するように要求したいとします。見つからない場合は、フォルダ内のアクションなどで検索します。\webroot\fus\ro\dah\IndexRoControllerDah\webroot\fus\ro\

MVCがこのように機能することを意図していない可能性は十分にあり、私は四角いペグを丸い穴に押し込もうとしています。

更新: ビューファイルを目的のフォルダー構造にドロップできるように見えます。実行されます。ただし、コントローラーを想定しているため、レイアウトは明らかに機能しません。これは、純粋なコンテンツページ用のコントローラーを作成する必要があることを意味しますか?それはかなりくだらないデザインです...

更新2: 現在の主な問題は、「fus」フォルダーを作成すると、MVCがFusController「fus」フォルダーの下やその他の場所を検索しようとさえしないことを意味します。それを回避することは可能ですか?

4

5 に答える 5

1

Asp.netとAsp.netMVCを混同することができます。LukLedが言ったように、MVCは設定より規約です。あなたが慣習に従うならば。構成する必要はありません。このリンクをチェックして、asp.netコンテンツとMVC3を混同することができます

Asp.netとRazorの混合

于 2012-06-03T01:40:34.340 に答える
1

たとえば、リクエスト/ fus / ro / dah /を使用して、\ webroot \ fus \ ro \ dah \フォルダーでDahControllerを検索し、そのインデックスアクションを実行したいとします。見つからない場合は、\ webroot \ fus \ro\フォルダーなどでDahアクションのあるRoControllerを探します。

MVCは、このような特定のニーズに合わせて設計されたものではなく、model-view-controllerパターンを使用してアプリケーションを構築するための一般的なフレームワークです。

フレームワーク用にアプリケーションを曲げることができない場合は、アプリケーション用にフレームワークを曲げることができ、正直なところ、MVCは非常にカスタマイズ可能です。[証拠として、私が作業している現在のプロジェクト(ASPからMVCへの移行)では、xmlとしてモデルがあり、レンダリングにXSLTを使用しているクラスはありません。少しの作業で、カスタムビューエンジン、カスタム検証プロバイダー、カスタムモデルバインダーなどのカスタムコンポーネントを作成しました...フレームワークをアプリケーションに最適なものにするために]

MVCは設計されておらず、そのまま使用する必要はありません。必要に応じてカスタマイズ/拡張できます。あなたの場合、あなたは作成する必要があるかもしれません

カスタムコントローラーファクトリ(コントローラーの選択方法をカスタマイズするため)、

カスタムビューエンジン(ビューの配置場所をカスタマイズするため)

そして他の人かもしれません。

カスタムコントローラファクトリの場合、DefaultControllerFactoryクラスを拡張する必要があります。カスタムコントローラーファクトリを作成する方法について説明しているGoogleを通じて見つけることができる記事がたくさんあります。

使用しているビューエンジンに応じて、それぞれを拡張する必要があります。例:Webフォームを使用している場合は、を拡張する必要がありWebFormsViewEngineますRazorViewEngine

詳細については。このリンクを確認してください

http://codeclimber.net.nz/archive/2009/04/08/13-asp.net-mvc-extensibility-points-you-have-to-know.aspx

于 2012-06-03T03:51:47.677 に答える
0

どのように「通常のASP.net」にしますか?「レガシー」ASP.NetWebフォームをMVCと混合して実行したい場合は、MVCと「ファイルベースのaspx」(別名「ハイブリッド」)を混合することができます。結局のところ、それはすべてASP.Netです。

これは、VisualStudioによって生成される標準のMVCアプリケーションです。somedirectory従来のfolder/file.extパラダイムを使用してdefault.aspxWebフォームファイルを作成するフォルダーを追加しました。

物理ディレクトリを使用したVSによるMVCスキャフォールディング

  • 経由で移動できますhttp://foo.com/somedirectoryか?はい
  • 「きれいなURL」も使えますか?はい

VSによって生成されたバニラGlobal.asax、追加されたばかりMapPageRoute

....

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    //using "pretty urls" - ordering your routes matter.
    routes.MapPageRoute("theWebForm", "legacy", "~/somedirectory/default.aspx");

    routes.MapRoute(
        "Default", 
        "{controller}/{action}/{id}", 
        new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
}
  • だから今私はそれを介してナビゲートすることができますhttp://foo.com/legacy

ルートの順序を確認し、「衝突」が発生しないように命名規則を計画してください...

Hth...。

于 2012-06-03T04:52:03.200 に答える
0

ASP.NETMVCはそのように使用するためのものではないと思います。それを行うようにMVCを構成することはできますが、標準の/controller/action/parametersURL形式を維持することをお勧めします。多くの異なる機能を備えた複雑なWebサイトがある場合は、領域が役立つ場合がありますhttp://msdn.microsoft.com/en-us/library/ee671793.aspx。すべての領域に独自のコントローラー、モデル、およびビューのセットがあるため、Webサイトのさまざまな部分で作業しているチームが互いに邪魔することはありません。

便利に聞こえるかもしれませんが、そのフレームワークは最初にDahControllerを検索してインデックスアクションを実行し、次に別のアクションを検索します。これは悪い考えです。誰かがインデックスアクションでRoControllerを作成したため、URLを明確に定義し、Roアクションを使用したFusコントローラーが機能を停止するだけではいけません。

于 2012-06-03T01:35:01.487 に答える
0

エリアの使用も検討してください。これは、MVCに関するフォルダー構造の問題を正直に克服するのに役立ったと思います。したがって、ホームの詳細としてベースフォルダーを使用できます。次に、別のフォルダーである「管理者」領域を作成できます。

于 2012-06-03T01:54:10.223 に答える