ASP.NET MVC 3在渲染之前发送

时间:2012-04-17 10:13:41

标签: asp.net asp.net-mvc-3 razor buffer flush

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

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

对于剃刀引擎,下一步的顺序是实际的:

  1. 操作返回查看结果
  2. _ViewStart.cshtml执行(设置ViewBag.Layout)
  3. 视图从第一行到最后一行执行(包含代码包含和部分)
  4. 查看引擎检查ViewBag.Layout,如果找到 - 执行Layout(使用renderind主体和部分)
  5. 我认为好的解决方案是将第3步分为3部分:

    1. 为Head和Css部分生成内容
    2. 发送到浏览器
    3. 生成视图的其他部分
    4. 其他解决方案是静态包括all.css和basic .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>
      

      HOWTO?

1 个答案:

答案 0 :(得分:3)

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

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

// Generate model

return View(model);

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