簡體   English   中英

ASP.NET MVC:哪里將代碼填充共享視圖?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM