C# ASP.NET MVC:在何处放置代码填充共享视图?
我是MVC的新手&来自asp.NETWebForms的背景,所以我仍然发现我的webforms思维方式很难打破。一个特别的问题是,如何处理填充共享视图所需的代码 在asp.net webforms中,假设我在母版页上有一个标签。要填充该标签,我需要做的就是将一些代码放入母版页codebehind中,所有引用此母版页的页面都将看到它 然而,在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
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中,然后在视图/布局中访问声明,不是更好吗?