2017-09-17 14 views
1

ASP.Net MVCの初心者質問:プロジェクトがあり、私は2つの "モデル"を管理しています - "製品"と "クライアント"としましょう。各モデルには独自のコントローラがあり、基本的なCRUD操作を実装するための一連のビューがあります。ASP.NET MVC - ビュー内の別のコントローラからのデータを使用

今、私は、すべての製品とすべてのクライアントから、別のビュー(ホームページと言うことができます)からリストしたいと思います。

[製品]と[クライアント]のコントローラにアイテムをリストし、これらのメソッドを[ホーム]の[インデックス]ビューから呼び出すには、新しいメソッドを作成する必要がありますか?ホームコントローラが製品とクライアントメソッドを呼び出すべきか?

この問題を正しく解決するにはどうすればよいですか?

Thansk in advance!

ペドロ

+1

可能な重複(https://stackoverflow.com/questions/5550627/ 2つのモデルの1つのビューin-asp-mvc-3) –

答えて

1

は、この質問に対する答えは主観と意見ベースの両方のある程度です。あなたのビューはModel.ProductViewModelを介してデータにアクセスする - それは、それが効果的にいくつかのProductViewModelの種類とClientViewModelプロパティで構成することになる(あなたのHomeIndexViewModelなるものを返すようにProductClient関連のメソッドを呼び出すためにHomeControllerの罰金..です

を言われています、Model.ClientViewModelなど)。

さらに進んで、HomeControllerIndexアクションで要求される要求とアプリケーションのロジックを処理するオーケストレーションコンポーネントを追加します。これはコントローラを薄くし、バックエンドから切り離す必要があります。

public class HomeController : Controller 
{ 

    private readonly IOrchestrator orchestrator; 

    public HomeController() : this(IOrchestrator orchestrator) 
    { 
    } 

    public HomeController(IOrchestrator orchestrator) 
    { 
     this.orchestrator = orchestrator; 
    } 

    public async Task<ActionResult> Index() 
    { 
     var homeIndexViewModel = await orchestrator.GetHomeProductsAndClientsAsync(); 
     return View(homeIndexViewModel); 
    } 

} 

GetHomeProductsAndClientsAsync()明らかHomeIndexViewModelを返すために、アプリケーションロジックを処理しますあなたのFooOrchestratorクラスのメソッドになります。

オーケストレータは、依存性注入を容易にする(IOrchestratorインターフェースを実装するIOrchestratorはなく、FooOrchestratorクラス)インタフェースとしてHomeControllerに渡され(ただし、私見は、アプローチが依然としてDIなしで有益です)。

一部読み取り:[ASP MVC 3つのビューに2つのモデル]の

"Never Mind the Controller, Here is the Orchestrator"

(ディノエスポジト)

+0

こんにちはtrashr0x、 ありがとうございました。それはまさに私が求めたものです。 オーケストラのことは聞いたことがありません。私はあなたがちょうど私を残したものを読むでしょう。 私はきれいなものがきれいで清潔です。 サービスと依存性注入について読んだことがあります。これが事実でしょうか?ロジックを製品およびクライアントコントローラから製品およびクライアントサービスに移動し、依存性注入によって処理する必要がありますか?この場合、私はちょうど私のHomeControllerに両方のサービス(コントローラではない)を注入し、それらの両方を使用しますか? ありがとうございました。 –

+1

はい、特定のサービスをコントローラに緊密に結合するのではなく、必要なサービスを注入します。これにより、オーケストレータはコントローラとデータレイヤのミドルウェアになります。 – trashr0x

+0

こんにちはtrashr0x。回答としてマーク! ご協力いただきありがとうございます。 –

関連する問題