[英]ASP.NET MVC: Where to place code populating shared view?
我是MVC的新手,來自asp.net Webforms背景,所以我仍然發現我很難打破Webforms的思維方式。 特別是一個問題,該如何處理需要填充共享視圖的代碼?
在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);
}
我應該如何處理此共享代碼,所以不需要繼續復制它?
謝謝
您可以將共享代碼放在方法中。
如果該代碼在多個控制器之間共享,那么您可以為控制器創建一個基類,並從您的基類而不是Controller
派生
如果您在所有操作中都做相同的事情,則可以覆蓋Controller.Initialize
,然后在其中編寫代碼。
您可以使用“ Child Action
。 想法是將此共享代碼放入特殊的控制器操作中:
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);
}
然后具有相應的局部視圖以顯示此共享視圖模型:
@model LayoutModel
...
您可以將其包含在_Layout.cshtml
中的所需位置:
<div>@Html.Action("MySharedAction", "SomeController")</div>
子操作即使與主要操作在相同的HTTP管道中運行,也可以與主要操作隔離,並且您的主要操作不需要了解此公共共享邏輯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.