gpt4 book ai didi

asp.net-mvc - Razor _Layout.cshtml 中的嵌入代码

转载 作者:行者123 更新时间:2023-12-03 04:29:52 39 4
gpt4 key购买 nike

我正在开发一个 MVC3 Razor Web 应用程序,它从 java 内容管理系统获取其页面装饰。由于此装饰由每个页面共享,我已将 CMS 内容的检索放入 _Layout.cshtml 文件中,但我对我实现的代码并不完全满意...

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
@{
-- The first two lines are temporary and will be removed soon.
var identity = new GenericIdentity("", "", true);
var principal = new GenericPrincipal(identity, new string[] { });
var cmsInterface = MvcApplication.WindsorContainer.Resolve<ICMSInterface>();
cmsInterface.LoadContent(principal, 2);
}
@Html.Raw(cmsInterface.GetHeadSection())
</head>

<body>
@Html.Raw(cmsInterface.GetBodySection(0))
@RenderBody()
@Html.Raw(cmsInterface.GetBodySection(1))
</body>
</html>

由于 _layout 文件没有 Controller ,我看不到还能在哪里放置代码来进行检索。以下是我考虑过的一些事情:

  • 以单独的片段检索 CMS 内容,这样我就不需要 LoadContent 调用。不幸的是,由于我必须使用组件来检索 CMS 内容,这是不可能的,要么全有,要么全无。
  • 使用部分 View ,以便我可以使用 Controller 。因为我需要将整个页面放入部分页面,所以这个选项看起来有点荒谬。
  • 在某个辅助类上调用单个静态方法,该方法检索数据并将三个部分添加到 ViewBag 中。这将使我能够将代码移出 View ,感觉这是最好的解决方案,但我仍然不是特别满意。

还有人有其他建议/意见吗?

最佳答案

您可以使用全局操作过滤器将所需数据添加到所有 Controller 中的 ViewBag 中:

public class LoadCmsAttribute : ActionFilterAttribute
{
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
if (!filterContext.IsChildAction &&
!filterContext.HttpContext.Request.IsAjaxRequest() &&
filterContext.Result is ViewResult)
{
var identity = new GenericIdentity("", "", true);
var principal = new GenericPrincipal(identity, new string[] { });
var cmsInterface = MvcApp.WindsorContainer.Resolve<ICMSInterface>();
cmsInterface.LoadContent(principal, 2);

var viewBag = filterContext.Controller.ViewBag;
viewBag.HeadSection = cmsInterface.GetHeadSection();
viewBag.FirstBodySection = cmsInterface.BodySection(0);
viewBag.SecondBodySection = cmsInterface.BodySection(1);
}
}
}

全局.asax:

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
...
filters.Add(new LoadCmsAttribute());
}

关于asp.net-mvc - Razor _Layout.cshtml 中的嵌入代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9740325/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com