2016-08-26 11 views
1

私はMVC &をasp.net webformsのバックグラウンドから取り入れているので、まだ私には分かりづらいウェブフォームの考え方があることがわかります。特に問題の1つは、共有ビューを作成するために必要なコードとは何ですか?ASP.NET MVC:共有ビューにデータを配置する場所はどこですか?

asp.net webformsでは、自分のマスターページにラベルがあるとします。そのラベルを設定するには、マスターページのコードビハインドにいくつかのコードを配置するだけです。このマスターページを参照するすべてのページに表示されます。

しかし、MVCでは共有コードをどこに配置するのか分かりません。現在、私は私の共有ビューを参照するビューを呼び出して、すべてのアクションに複製され、次のコードを持っているので、私は共有ビューにデータを取り込むことができます。

public ActionResult MyFirstView() 
    { 
     Account account = _accountRepository.GetAccountByEmail(System.Web.HttpContext.Current.User.Identity.Name); 
     List<Campaign> campaigns = new List<Campaign>(); 
     campaigns = _campaignRepository.GetCampaignsByAccountId(account.AccountId); 

     LayoutModel model = new LayoutModel 
     { 
      AccountId = account.AccountId, 
      Email = account.Email, 
      Name = account.Name, 
      LogoPath = account.LogoPath, 
     }; 

     foreach (Campaign campaign in campaigns) 
     { 
      model.AddCampaigns(campaign); 
     } 

     return View(model); 
    } 

は、私は、この共有コードで何をすべきなので、私はしないでくださいそれを複製し続ける必要がありますか?

ありがとうございました

+0

MVCコントローラではなく、_simple、normal_ classの場合は、同じ... –

+0

クレームを使ってクッキーにそのものを保存し、ビュー/レイアウト内のクレームにアクセスする方がいいでしょうか? – pmeyer

答えて

3

メソッド内に共有コードを配置できます。

そのコードは、複数のコントローラ間で共有されている場合は、あなたのコントローラの基本クラスを作ることができ、あなたはすべての中で同じことをやっている場合は、あなたの基本クラスから代わりのController

から派生あなたの行動Controller.Initializeを上書きしてそこにコードを書くことができます。

1

Child Actionを使用できます。

@model LayoutModel 

... 

あなたがであなた_Layout.cshtmlに含めることができます

public ActionResult MySharedAction() 
{ 
    Account account = _accountRepository.GetAccountByEmail(System.Web.HttpContext.Current.User.Identity.Name); 
    List<Campaign> campaigns = _campaignRepository.GetCampaignsByAccountId(account.AccountId); 

    LayoutModel model = new LayoutModel 
    { 
     AccountId = account.AccountId, 
     Email = account.Email, 
     Name = account.Name, 
     LogoPath = account.LogoPath, 
    }; 

    foreach (Campaign campaign in campaigns) 
    { 
     model.AddCampaigns(campaign); 
    } 

    return PartialView(model); 
} 

は、この共有ビューモデルを表示するには、対応する部分図を持っている:アイデアは、特別なコントローラのアクションにこの共有コードを配置することです目的の場所:

<div>@Html.Action("MySharedAction", "SomeController")</div> 

子アクションは、それがそれから分離されているメインアクションと同じHTTPパイプラインで実行されていても、メインアクションdこの共通の共有ロジックについて知る必要はありません。

関連する問題