Sitecore 7:将视图渲染中的CSS组合到布局中<;头>;地区

Sitecore 7:将视图渲染中的CSS组合到布局中<;头>;地区,sitecore,sitecore7,Sitecore,Sitecore7,这可能是一个新手Qs。。。我正在为我的web应用程序使用Sitecore 7,这就是我目前所拥有的 数据模板-只有一个名为“标题”的字段显示页面特定的标题 一个布局-指向asp.net mvc项目路径下的cshtml文件。它具有从Doctype开始的完整标记。head标记下的title标记使用Sitecore的Html扩展来呈现#1中提到的模板中的字段“title”。这还通过布局的主体标记下名为“页面主体”的占位符呈现sitecore的视图 我在asp.net mvc项目中创建了一个指向Razo

这可能是一个新手Qs。。。我正在为我的web应用程序使用Sitecore 7,这就是我目前所拥有的

  • 数据模板-只有一个名为“标题”的字段显示页面特定的标题

  • 一个布局-指向asp.net mvc项目路径下的cshtml文件。它具有从Doctype开始的完整标记。head标记下的title标记使用Sitecore的Html扩展来呈现#1中提到的模板中的字段“title”。这还通过布局的主体标记下名为“页面主体”的占位符呈现sitecore的视图

  • 我在asp.net mvc项目中创建了一个指向Razor视图的视图渲染。这一观点只是让h1呼喊“你好,世界”

  • Sitecore/Content/Home项目(来自Sitecore的主目录树)使用在#1中创建的模板,并使用在#2中创建的布局。此项在#3中创建了一个且仅一个渲染

  • 现在,当我从我的本地sitecore网站点击根时,一切看起来都很好!我在H1标签的body标签下看到Hello World,布局中提到了完整的html makrup

    这就是事情开始变得复杂的地方。。。现在,我希望我的视图渲染(在#3中创建)引用一个CSS文件,该文件仅特定于此渲染。此CSS不会引用到所有页面。当然,我想将引用添加到head中,作为link href。因此,我尝试使用asp.net mvs“Section”,但我一直得到一个甜蜜的错误“无法直接请求文件,因为它调用了rendersection方法…”,因此我意识到我的视图渲染没有任何@{Layout=“…”},当然这是由sitecore引擎控制的

    因此,我仍然继续在视图渲染的cshtml文件中添加了布局引用,并引用了Sitecore引擎将引用的相同布局文件(即上面的#2)。我仍然有同样的错误

    然后我找到了一篇文章,这篇文章主要是针对脚本的,并尝试实现CSS。但这也不起作用,因为视图渲染是在head标记中的Helper被执行之后执行的,所以我的CSS引用永远不会在流中吐出。顺便说一句,对于脚本,此解决方案非常有效,因为脚本渲染辅助程序是在Sitecore的视图渲染之后调用的


    在这一点上,我完全陷入了“如何在head标签中获得视图渲染的CSS引用”的困境。是否有sitecore专家在此提供帮助?

    因此,这无疑是一种更高级的定制,但我们使用和对
    渲染布局
    管道进行了定制。使用此管道可以解决在视图渲染之前调用head标记中的辅助对象的问题

  • 扩展视图呈现模板(
    /sitecore/templates/System/Layout/Renderings/view rendering
    ),并添加一个字段,用于存储要包含在页面上的盒式磁带包的名称
  • RenderLayoutProcessor
    中,循环浏览所有页面渲染(
    Sitecore.Context.page.renderings
    ),检查bundle字段的渲染项(
    rendering.RenderingItem.InnerItem[your_字段]
    ),并调用CASE的
    Bundles.Reference
  • 在主布局的标题中,调用盒式磁带的
    Bundles.RenderStylesheets()
  • 您也可以在不使用盒式磁带的情况下完成这项工作,但它使脚本和样式表的捆绑、引用和包含变得更加容易


    这种方法的另一个优点是它不会破坏Sitecore缓存。任何需要在视图渲染中执行代码的方法都会使Sitecore HTML缓存变得无用,因为在缓存渲染时,代码将不会执行,页面样式将被破坏。

    为什么不在所有页面上包含所有CSS,并使用CSS选择器只针对渲染中的内容,通过
    ID
    或css
    class
    选择器?对我来说,这听起来太过分了。卡带正在做什么,即使IIS请求减少模块也可以为我做,而无需添加一行代码。只要我在头部有所有CSS,在页面底部有所有脚本,IIS请求Reduce就会在运行时合并、缩小和所有这些好东西。我不明白的是“为什么Sitecore不允许我使用Section和RenderSection”。尽管视图渲染中提到了布局文件,但Sitecore不喜欢将RenderSection调用添加到布局文件中。我对Sitecore MVC了解不够,无法回答这个问题,但我认为您会发现这种方法可能会使您无法利用Sitecore的HTML缓存。