ASP.Net Core:ViewComponent vs EditorTemplate / DisplayTemplate vs @inject


10

そのため、ASP.Net Coreでビューにレンダリングする「コントロール」を作成するための良い方法を探していました。これまでのところ、3つのオプションがあることがわかりました。

  1. ViewComponents:これらはミニコントローラーのようなもので、かみそりのページ(ビュー)からレンダリングするアクションのようなメソッドを使用します。私はそれらが自己完結型ロジックを持つことができるので、どの親ビューモデルにも依存しません。

  2. EditorTemplate / DisplayTemplateフォルダー:これらは「Views / Shared /」の下に存在し、モデルプロパティをそれらに(DisplayFor()またはを使用してEditorFor())渡すことでビューにプルできます。

  3. ASP.Net Coreの@inject:ビューに型を挿入できます(部分的なビューを関連付けることができるかどうかわかりません)。

  4. 部分的なビューを直接含める機能は、移植する制御システムの意図ではないため、省略します。

  5. タグヘルパー-現在のビューコンテキストを挿入して、これらからコントロールを構築することもできます。

古いASP.NET MVCアプリでは、テンプレートからレンダリングされるいくつかのコントロールがありました(#2)。ただし、.Net Coreの場合、関連するかみそりビュー(コントロールは基本的にかみそりビューをラップするだけ)をレンダリングするために、代わりにViewComponents(より強力に見える)を使用することを考えています。とりあえず、ViewComponentsへの変換を試すつもりですが、この件についてのアドバイスがありがたいです。ありがとう。

回答:


2

実行するビジネスロジックがある場合は、ViewComponentを使用します。関心の分離(SoC)の原則をサポートします。ビューからパラメーターをViewComponentクラスに注入できます(かみそり.cshtmlファイルを使用)。ViewComponentビューはViews / Shared / Componentsにあります。強く型付けできます。ViewComponentは非同期のメソッド呼び出しを使用するため、ユーザーはページ全体のコンテンツがすべて読み込まれるのを待つ必要はありません。さらに、ViewComponentはタグヘルパーとして呼び出すことができます。@ addTagHelpersディレクティブを使用して、ViewCompenentをタグヘルパーとして追加する必要があります。この機能は、かみそりエディターテンプレートで開発者エディターをサポートします。

特定のタイプまたはクラスを編集または表示する場合は、エディター/表示テンプレートを使用します。たとえば、製品オブジェクトが仕様テーブルとともに表示されるように指定するとします。MVCアプリケーションでDRY原理を維持します。表示したいオブジェクトにバインドされたモデルである部分ビューとして使用できます。


0

私のアプローチは次のとおりです...

  1. ViewComponentを使用して、表示するモデルを取得する方法のビジネスロジックをカプセル化します。
  2. ターゲットビューがシンプルまたはシングル、あるいはその両方の場合は、htmlを直接ここに配置します。それ以外の場合は、DisplayTemplateを使用してモデルをレンダリングします

理論的根拠は、ビジネスロジックとレンダリングの間で懸念が分離されていることです。

実用的な例として、コンテキスト固有のメニュー構造のようなものを取り上げます。ViewComponentは表示するメニューを決定でき、DisplayTemplateはそれぞれを表示できます。


これらを使用してデータをロードする場合は注意してください。私の従業員がそれを行い、後でAJAX用のREST APIを作成したいときに(たとえば、誰かがAngularを使用したい場合)、ロジックはコンポーネントではなくAPIにありました。;)サイトでREST APIを使用していない場合(現在一般的です)、コンポーネントは、コントローラーアクションによってコンポーネントにデータを渡し、結果を返すことによってのみレンダリングするのに最適です。最後に、注入されたアクションコンテキストでタグヘルパーを使用して、ビューのタグとしてコントロールを構築することにしました。結局ずっときれいに見えます。;)
James Wilkins、

APIをViewComponentに注入して実際にデータを取得します。たとえば、ajaxを使用してコンポーネントを更新するなど、ターゲットhtmlを返す同じロジックが必要な場合は、コントローラーメソッドを介してそれを公開します。
ポールハッチャー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.