gpt4 book ai didi

c# - 如何更改 MVC 中子 Action 的顺序

转载 作者:太空狗 更新时间:2023-10-29 23:33:55 27 4
gpt4 key购买 nike

我想在子操作中生成 HTML head 部分;而该页面还有许多其他子操作。 html head 部分取决于其他操作来确定应包含哪些 js/css 文件。不同的子 Action 可以共享同一个js/css文件;并且不同的页面有不同的 css/js 组合,所以这样做是有原因的。这是我的示例代码:

Layout.cshtml:
<html>
<head>
@RenderZone("header")
</head>
<body>
@RenderZone("zone1")
@RenderZone("zone2")
@RenderZone("zone3")
</html>

每个区域都有 1 个或多个子操作。

RenderZone 实际上也是一个 Action 。数据模式:

Model = GetAllChildActions(zoneName)

RenderZone View :

foreach(var m in Model)
@html.action(controller = m.controller, action = m.action)

因为Header zone在最上面,所以它总是先执行,然后它不能从其他子 Action 中获取数据。我已经尝试过过滤器(onActionExecuted;onActionResultExcuted 等等),但它们都不起作用。我真的需要在呈现所有子 Action 后执行 header Action 。我不想在页面底部生成 css。我可以,但我不想使用 javascript 来注入(inject) js/css 文件;或者编写一个 http 模块来“手动”更改输出 html。在webform中处理起来非常容易。我相信在 MVC 中也有一种方法可以做到这一点。任何帮助将不胜感激!

最佳答案

您可以预渲染所有子 Action :

@{
var prerender = new Dictionary<string, MvcHtmlString>();
prerender["header"] = RenderZone("header");
prerender["zone1"] = RenderZone("zone1");
}

然后在正文中:

@prerender["header"]

通过这种方式,您可以让所有子项在呈现 View 中的第一个区域之前执行它们的执行,并将脚本/css 注册存储在当前的 HttpContext 中。

关于c# - 如何更改 MVC 中子 Action 的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7696516/

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