首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >相当于建筑工程中的Razor剖面助手

相当于建筑工程中的Razor剖面助手
EN

Stack Overflow用户
提问于 2014-03-10 16:02:03
回答 3查看 1.6K关注 0票数 4

我试图包括不同的脚本在不同的页面上,并似乎无法找到一个非常好的方法来做这件事。在普通的mvc项目中,我可以添加@节{}助手,并在不同的部分视图上使用它来指定布局视图中那些脚本的位置,但是我还没有找到Razor helper的实现方式的等效方法。我想做到这一点,而不使用一个位置持有人,我不想添加一个视图,在任何时候,我需要添加一个脚本文件。

提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-03-02 14:50:41

在我当前的Sitecore解决方案中设置它的方式是,我的布局在关闭正文标记之前底部有一个扩展方法调用RenderScripts()。

代码语言:javascript
复制
@Html.RenderScripts()

该扩展方法如下所示:

代码语言:javascript
复制
public static IHtmlString RenderScripts(this HtmlHelper htmlHelper)
    {
       var templates = (from object key in htmlHelper.ViewContext.HttpContext.Items.Keys 
                        where key.ToString().StartsWith("_script_") 
                        select htmlHelper.ViewContext.HttpContext.Items[key]).OfType<Func<object, HelperResult>>()
                            .Select(template => template(null)).ToList();
        foreach (var template in templates)
        {
            htmlHelper.ViewContext.Writer.Write(template);
        }
        return MvcHtmlString.Empty;
    }

然后,在每个MVC Razor视图上,当我想要包含一个特定于该呈现的.js文件时,我在文件底部调用如下所示:

代码语言:javascript
复制
        @Html.Script(
        @<script src="@Url.Content("~/js/custom/orderdetail.js?t=11172015")" type="text/javascript"></script>
    )

下面是脚本扩展方法:

代码语言:javascript
复制
        public static MvcHtmlString Script(this HtmlHelper htmlHelper, Func<object, HelperResult> template)
    {
        htmlHelper.ViewContext.HttpContext.Items["_script_" + Guid.NewGuid()] = template;
        return MvcHtmlString.Empty;
    }

这对我们来说很好,我认为这就是你们想要做的。

票数 2
EN

Stack Overflow用户

发布于 2014-03-10 17:41:26

恐怕你在这儿运气不好。

@Section不受支持,因为它没有以与MVC相同的方式呈现Razor视图。

Sitecore布局基本上只是一个常规视图,它提供了其他几个部分视图或控制器操作。

因此,当呈现布局视图的<body>中的占位符时,布局的<head>部分已经呈现。

没有像你可以用@Section做的那样延迟渲染的事情。

视图中的所有内容都是从上到下执行的,因此,如果您可以将脚本放在布局的末尾(就像在</body>之前),您仍然可以在前面执行的视图或操作中操作数据。

票数 5
EN

Stack Overflow用户

发布于 2014-03-10 18:36:41

事实上,Sitecore不支持Section。如果您正在使用MVC4,您可以使用Bundles来解决您的问题。有关更多信息,请参见:http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification,您还可以为特定视图创建多个包。在单个绑定中,可以添加多个脚本并通过添加@Scripts.Render()将其输出到视图中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22305185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档