24寄稿者
この記事では
ビューコンポーネント
ビューコンポーネントの作成
ビューコンポーネントの呼び出し
ビューコンポーネントをタグヘルパーとして呼び出す
3つの詳細を表示
Rick Andersonによる

ビューコンポーネント
ビューコンポーネントは部分ビューと似ていますが、はるかに強力です。ビューコンポーネントはモデルバインディングを使用せず、ビューコンポーネントを呼び出す際に渡されたデータに依存します。この記事はコントローラーとビューを使用して作成されましたが、ビューコンポーネントはRazorページとも連携します。

ビューコンポーネントは以下の特徴を持っています:

全体の応答ではなく、チャンクをレンダリングします。
コントローラーとビューの間で見られる関心の分離とテスト可能な利点が含まれます。
パラメーターとビジネスロジックを持つことができます。
通常、レイアウトページから呼び出されます。
ビューコンポーネントは、部分ビューには複雑すぎる再利用可能なレンダリングロジックが必要な場所に意図されています。例えば:

動的ナビゲーションメニュー
データベースをクエリするタグクラウド
サインインパネル
ショッピングカート
最近発行された記事
ブログのサイドバーコンテンツ
ユーザーのサインイン状態に応じて、すべてのページにレンダリングされるサインインパネルで、サインアウトまたはサインインのリンクが表示される
ビューコンポーネントは2つのパーツで構成されています:

クラス、通常はViewComponentから派生
通常はビューである返り値
コントローラー同様、ビューコンポーネントはPOCOであることができますが、ほとんどの開発者はViewComponentから派生することで利用可能なメソッドとプロパティを活用しています。

ビューコンポーネントがアプリの仕様を満たすかどうかを検討する際には、Razorコンポーネントを代わりに検討することを検討してください。 RazorコンポーネントもマークアップとC#コードを組み合わせて再利用可能なUIユニットを生成します。 Razorコンポーネントは、クライアントサイドのUIロジックと構成を提供する際の開発者の生産性を向上させるために設計されています。 詳細については、「ASP.NET Core Razorコンポーネント」を参照してください。 MVCまたはRazor PagesアプリにRazorコンポーネントを組み込む方法については、「ASP.NET CoreアプリにRazorコンポーネントを統合する」を参照してください。

ビューコンポーネントの作成
このセクションには、ビューコンポーネントを作成するための高レベルの要件が含まれています。記事の後半では、各ステップを詳細に調査してビューコンポーネントを作成します。

ビューコンポーネントクラス
ビューコンポーネントクラスは、次のいずれかの方法で作成できます:

ViewComponentから派生
[ViewComponent]属性でクラスをデコレートするか、[ViewComponent]属性で派生
名前がViewComponentサフィックスで終わるクラスを作成
コントローラー同様、ビューコンポーネントはpublicで、ネストされていない、および抽象ではないクラスである必要があります。ビューコンポーネントの名前は、クラス名からViewComponentサフィックスを削除したものです。Nameプロパティを使用して明示的に指定することもできます。

ビューコンポーネントクラス:

コンストラクター依存性注入をサポート
コントローラーライフサイクルに参加しないため、フィルターをビューコンポーネントで使用することはできません
ViewComponentサフィックスを大文字小文字区別しないようにするには、クラスに[NonViewComponent]属性を付けてください:

C#

Copy
using Microsoft.AspNetCore.Mvc;

[NonViewComponent]
public class ReviewComponent
{
public string Status(string name) => JobStatus.GetCurrentStatus(name);
}
ビューコンポーネントメソッド
ビューコンポーネントは、Task<IViewComponentResult>を返すInvokeAsyncメソッドまたはIViewComponentResultを返す同期のInvokeメソッドでロジックを定義します。パラメーターはモデルバインディングではなく、ビューコンポーネントの呼び出しに直接来ます。ビューコンポーネントは決して直接リクエストを処理しません。通常、ビューコンポーネントはモデルを初期化し、Viewメソッドを呼び出してビューに渡します。要約すると、ビューコンポーネントメソッド:

Task<IViewComponentResult>を返すInvokeAsyncメソッドまたはIViewComponentResultを返す同期Invokeメソッドを定義します。
通常はモデルを初期化し、ViewComponent.Viewメソッドを呼び出してビューに渡します。
パラメーターは呼び出し元のメソッドから取得され、HTTPからではありません。モデルバインディングはありません。
HTTPリクエストとして直接到達できません。通常はビューで呼び出されます。ビューコンポーネントはリクエストを直接処理しません。
現在のHTTPリクエストの詳細ではなく、シグネチャにオーバーロードされます。
ビュー検索パス
ランタイムはビューを次のパスで検索します:

/Views/{Controller Name}/Components/{View Component Name}/{View Name}
/Views/Shared/Components/{View Component Name}/{View Name}
/Pages/Shared/Components/{View Component Name}/{View Name}
/Areas/{Area Name}/Views/Shared/Components/{View Component Name}/{View Name}
この検索パスは、コントローラー+ビューおよびRazor Pagesを使用するプロジェクトに適用されます。

ビューコンポーネントのデフォルトのビュー名はDefaultです。つまり、ビューファイルは通常、Default.cshtmlという名前になります。異なるビュー名は、ビューコンポーネント結果を作成するか、Viewメソッドを呼び出すときに指定できます。

このサンプルで使用されるPriorityListビューコンポーネントは、Views/Shared/Components/PriorityList/Default.cshtmlをビューコンポーネントビューとして使用します。

https://amondfamily.com
https://atapindustries.com
https://bluefielddailytelegraph.com
https://callwebguy.com
https://defendnewjersey.com
https://jamestownpostjournal.com
https://jeaughn.net
https://lewylewy.com
https://mikeorth.com
https://newinternetmall.com
https://pctwifi.com
https://philmarshallproperties.com
https://raffihart.com
https://sumepevaju.com
https://thebakersfieldcalifornian.com
https://thefinaltask.com
https://theheightsofhorseshoe.com
https://thissiteforsale.com
https://yashajin.com
https://yourpartystores.com
https://airsourcehealth.com
https://aloline.com
https://americanproductnetwork.com
https://charliemillermusic.com
https://djwaxyfresh.com
https://drumkat.com
https://elencantohome.com
https://forecourtsystems.com
https://galwayinfo.com
https://gordonadkins.com
https://haba-japan.com
https://irishhorsetrade.com
https://jupiterboxingclub.com
https://kmbrown.com
https://missouriarchitects.com
https://newtonbigelow.com
https://oakcorporate.com
https://opwebinar.com
https://pclstudygroup.com
https://prioratech.com
https://rongraff.com


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2024-03-14 (木) 02:17:14 (48d)