C# ASP.NET MVC:在何处放置代码填充共享视图?

C# ASP.NET MVC:在何处放置代码填充共享视图?,c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,我是MVC的新手&来自asp.NETWebForms的背景,所以我仍然发现我的webforms思维方式很难打破。一个特别的问题是,如何处理填充共享视图所需的代码 在asp.net webforms中,假设我在母版页上有一个标签。要填充该标签,我需要做的就是将一些代码放入母版页codebehind中,所有引用此母版页的页面都将看到它 然而,在MVC中,我不确定在哪里放置共享代码。目前,我在引用我的共享视图的所有调用视图的操作上复制了以下代码,因此我可以在共享视图上填充数据: public Acti

我是MVC的新手&来自asp.NETWebForms的背景,所以我仍然发现我的webforms思维方式很难打破。一个特别的问题是,如何处理填充共享视图所需的代码

在asp.net webforms中,假设我在母版页上有一个标签。要填充该标签,我需要做的就是将一些代码放入母版页codebehind中,所有引用此母版页的页面都将看到它

然而,在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);
    }
公共操作结果MyFirstView() { Account Account=\u accountRepository.GetAccountByEmail(System.Web.HttpContext.Current.User.Identity.Name); 列表活动=新列表(); 活动=\u活动存储库.getActivationsByAccountId(account.AccountId); LayoutModel模型=新的LayoutModel { AccountId=account.AccountId, Email=account.Email, Name=account.Name, LogoPath=account.LogoPath, }; foreach(活动中的活动) { 模型。添加活动(活动); } 返回视图(模型); } 我应该如何处理这个共享代码,这样我就不需要继续复制它了


谢谢

您可以在方法中放置共享代码

如果该代码在多个控制器之间共享,则可以为控制器创建基类,并从基类而不是从
Controller


如果在所有操作中都执行相同的操作,则可以重写控制器。初始化,然后在那里编写代码。

可以将共享代码放在方法中

如果该代码在多个控制器之间共享,则可以为控制器创建基类,并从基类而不是从
Controller

如果您在所有操作中都执行相同的操作,则可以覆盖控制器。初始化,然后在那里编写代码。

您可以使用。其想法是将此共享代码放在一个特殊的控制器操作中:

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);
}
您可以将其包含在所需位置的
\u Layout.cshtml
中:

<div>@Html.Action("MySharedAction", "SomeController")</div>
@Html.Action(“MySharedAction”、“SomeController”)
子操作即使与主操作在相同的HTTP管道中运行,它也与主操作隔离,并且您的主操作不需要了解此公共共享逻辑。

您可以使用。其想法是将此共享代码放在一个特殊的控制器操作中:

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);
}
您可以将其包含在所需位置的
\u Layout.cshtml
中:

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

子操作即使与主操作在相同的HTTP管道中运行,它也与主操作隔离,并且您的主操作不需要了解此公共共享逻辑。

如果它不是MVC控制器,而是简单的普通类?同样,如果不是MVC控制器,而是一个简单的普通类,那么使用声明将这些内容存储在cookie中并在视图/布局中访问声明不是更好吗?同样……使用声明将这些内容存储在cookie中,然后在视图/布局中访问声明,不是更好吗?