4

我有 asp.net mvc 应用程序,它使用 razor 视图引擎。

我想在渲染正文之前将 head 发送到浏览器,以开始并行加载 css、js 和图像,并在 css 中链接。(您可以看到,这种技术如何在 chrome 开发人员工具中的SO上工作- 例如网络)我在 asp.net 网络表单中发现了关于它的问题:Send head before body to load CSS and JS asap 我尝试使用这个解决方案,但是它不起作用。

对于剃须刀引擎,接下来的步骤是实际的:

  1. 动作返回视图结果
  2. _ViewStart.cshtml 执行(设置 ViewBag.Layout)
  3. 视图从第一行执行到最后(包含代码和部分)
  4. 视图引擎检查 ViewBag.Layout,如果找到 - 执行布局(带有 renderind 正文和部分)

我认为好的解决方案是将步骤 3 分为 3 个部分:

  1. 为 Head 和 Css 部分生成内容
  2. 发送到浏览器
  3. 生成视图的其他部分

其他解决方案是静态包含 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>

如何?

4

1 回答 1

3

尝试将您的头部部分放入部分视图中,然后在您的控制器中调用它:

PartialView("_PageHeader").ExecuteResult(ControllerContext);
Response.Flush();

// Generate model

return View(model);

没有对此进行测试,但我不明白为什么它不起作用。

于 2012-04-17T10:19:53.310 回答