我有 asp.net mvc 应用程序,它使用 razor 视图引擎。
我想在渲染正文之前将 head 发送到浏览器,以开始并行加载 css、js 和图像,并在 css 中链接。(您可以看到,这种技术如何在 chrome 开发人员工具中的SO上工作- 例如网络)我在 asp.net 网络表单中发现了关于它的问题:Send head before body to load CSS and JS asap 我尝试使用这个解决方案,但是它不起作用。
对于剃须刀引擎,接下来的步骤是实际的:
- 动作返回视图结果
- _ViewStart.cshtml 执行(设置 ViewBag.Layout)
- 视图从第一行执行到最后(包含代码和部分)
- 视图引擎检查 ViewBag.Layout,如果找到 - 执行布局(带有 renderind 正文和部分)
我认为好的解决方案是将步骤 3 分为 3 个部分:
- 为 Head 和 Css 部分生成内容
- 发送到浏览器
- 生成视图的其他部分
其他解决方案是静态包含 all.css 和基本 .js 文件(没有部分内容,从视图生成),发送头部,然后生成视图(生成 FooterScript 部分)。
在这两种方式中,我都需要从布局页面开始执行,而不是从视图中。首先:布局(头部)-视图(部分)-布局(刷新)-视图(其他)-布局(正文)。第二:布局(头部+冲洗)-视图(全部)+布局(正文)。
我的 _Layout.cshtml 文件:
<html @Html.Raw(ViewBag.xmlns)>
<head>
<title>@ViewBag.Title</title>
@Html.Partial("_MetaTags")
<link href="@Url.ThemeCss("jquery-ui-1.8.18.custom.css")" rel="stylesheet" type="text/css" />
<link href="@Url.Css("masterPage.css")" rel="stylesheet" type="text/css" />
<link rel="shortcut icon" href="/favicon.ico"/>
@RenderSection("Css", required: false)
<script src="@Url.CommonScript("jquery.common.min.js")" type="text/javascript"></script>
<script src="@Url.Script("Master.js")" type="text/javascript"></script>
@RenderSection("Head", required: false)
</head>
<body>
<div id="pageWhithoutFooter">
<div id="main">
@RenderBody()
</div>
</div>
@RenderSection("FooterScript", required: false)
</body>
</html>
如何?