加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 相当于Sitecore中的Razor Section Helper

发布时间:2020-12-16 07:19:48 所属栏目:asp.Net 来源:网络整理
导读:我试图在Sitecore的不同页面上包含不同的脚本,似乎无法找到一个非常好的方法来做到这一点.在一个普通的mvc项目中,我可以添加@Section {}帮助器,并在不同的局部视图上使用它来指定布局视图中我想要这些脚本的位置,但是我无法找到Razor助手的方式的等价物是使
我试图在Sitecore的不同页面上包含不同的脚本,似乎无法找到一个非常好的方法来做到这一点.在一个普通的mvc项目中,我可以添加@Section {}帮助器,并在不同的局部视图上使用它来指定布局视图中我想要这些脚本的位置,但是我无法找到Razor助手的方式的等价物是使用Sitecore实现的.我想在不使用占位符的情况下执行此操作,每次需要添加脚本文件时,我都不想在Sitecore中添加视图.

提前致谢.

解决方法

我在当前的Sitecore MVC解决方案中设置它的方式是我的布局在关闭body标签之前的底部有一个扩展方法调用RenderScripts().

@Html.RenderScripts()

该扩展方法如下所示:

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 View上,当我想要包含特定于该渲染的.js文件时,我在文件的底部调用类似下面的内容:

@Html.Script(
        @<script src="@Url.Content("~/js/custom/orderdetail.js?t=11172015")" type="text/javascript"></script>
    )

以下是脚本扩展方法:

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

这对我们来说效果很好,我认为这是你想要做的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读