8

ビューがどのように構成されているかについて混乱しています。ASP.NET MVC は規則を使用してすべてを正しく機能させるため、これを理解することが重要です。

views ディレクトリの下には、サブディレクトリがあります。これらのサブディレクトリ内にはビューがあります。サブディレクトリはコントローラーにマップされ、コントローラーはサブディレクトリ内に含まれるビューに作用すると想定しています。

これらのディレクトリに含まれるビューの種類について新たな期待はありますか? たとえば、各ディレクトリの既定のページは index.aspx にする必要がありますか? ページは、Create[controller].aspx、List[controller].aspx などの命名規則に従う必要がありますか? それとも関係ありませんか?

4

2 に答える 2

7

ビュー ディレクトリの名前付けとファイルの名前付けは重要です。これは、ASP.NET MVC フレームワークがそれらについて特定の前提を置いているためです。これらの仮定に従わない場合は、コードを記述して、何をしているのかをフレームワークに知らせる必要があります。一般的に言えば、そうしない正当な理由がない限り、これらの仮定に従う必要があります。

最も単純なコントローラ アクションを見てみましょう。

    public ActionResult NotAuthorized()
    {
        return View();
    }

View() の呼び出しでビュー名が指定されていないため、フレームワークはビュー ファイル名がアクション名と同じであると想定します。フレームワークには、拡張機能を提供する ViewEngine と呼ばれるタイプがあります。デフォルトの ViewEngine は WebFormViewEngine で、その名前に .aspx を追加します。したがって、この場合の完全なファイル名は NotAuthorized.aspx になります。

しかし、ファイルはどのフォルダーにありますか? ここでも、ViewEngine がその情報を提供します。WebFormViewEngine を使用すると、~/Views/Shared と ~/Views/{controller} の 2 つのフォルダーが表示されます。

したがって、コントローラーが AccountController と呼ばれる場合、~/Views/Account を参照します。

しかし、これらのルールに従いたくない場合もあります。たとえば、2 つの異なるアクションが同じビュー (異なるモデルなど) を返す場合があります。この場合、アクションでビュー名を明示的に指定すると、次のようになります。

    public ActionResult NotAuthorized()
    {
        return View("Foo");
    }

WebFormViewEngine では、「ビュー名」は通常、拡張子を除いたファイル名と同じですが、フレームワークは他のビュー エンジンのそれを必要としません。

同様に、アプリケーションでビューや既定以外のフォルダーを探す必要がある場合もあります。これを行うには、独自の ViewEngine を作成します。このブログ投稿で手法を示していますが、以前のバージョンのフレームワーク用に記述されているため、型名が異なります。ただし、基本的な考え方は同じです。

于 2008-09-24T16:00:42.960 に答える
2

ビューの予想される名前に関しては、各プロジェクトまたは組織が標準化しようとするものの 1 つだと思います。

質問で示唆したように、これらのビュー (またはより正確には、それらをレンダリングするアクション) の一部が全面的に人気になる可能性があります。たとえば、REST パラダイムを採用する RoR アプリケーションで一般的な以下のようなものです。

  • /orders/ (つまり、インデックス)
  • /orders/show/123
  • /注文/編集/123
  • /注文/更新/123
  • /注文/新規
  • /注文/作成
  • /orders/destroy/123

ビューの選択/標準化は、アプリケーションをどのようにモデル化するか (明白に言うと) と、どの程度きめ細かくしたいかによって大きく異なります。コントローラーを個々のモデル クラス (咳...リソース...咳) に近づけるほど、アクションが短くなる傾向があり、標準的な一連のアクションをより簡単に実行できるようになります (上記の例のように)。 )。

また、アクションを短くすることで、モデルのビジネス ロジックを、それが属するモデル自体にますます押し込むことができると考えています。

于 2008-09-24T18:39:06.463 に答える