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

asp.net-mvc – 部分视图中的Razor部分包含

发布时间:2020-12-16 00:11:33 所属栏目:asp.Net 来源:网络整理
导读:我在_Layout.cshtml中有脚本部分: html body ... @RenderSection("FooterScript",required: false) /body/html 我查看了包含@ Html.RenderPartial(“LinksBlock”,someModel)的“Index.cshtml”. LinksBlock部分需要脚本文件“links.js”.我想从我的局部视
我在_Layout.cshtml中有脚本部分:
<html>
    <body>
    ...
        @RenderSection("FooterScript",required: false)
    </body>
</html>

我查看了包含@ Html.RenderPartial(“LinksBlock”,someModel)的“Index.cshtml”.
LinksBlock部分需要脚本文件“links.js”.我想从我的局部视图中将links.js包含到FooterScript中,而不是从主视图(主视图不知道部分视图的依赖关系),我想确定,如果我在我的中使用多个LinksBlock查看,只包含1个links.js.可能吗?

解决方法

部分不适用于部分视图.但是你可以编写一对可以结合使用的自定义助手:
public static class HtmlExtensions
{
    public static IHtmlString RegisteredScripts(this HtmlHelper htmlHelper)
    {
        var ctx = htmlHelper.ViewContext.HttpContext;
        var registeredScripts = ctx.Items["_scripts_"] as Stack<string>;
        if (registeredScripts == null || registeredScripts.Count < 1)
        {
            return null;
        }
        var sb = new StringBuilder();
        foreach (var script in registeredScripts)
        {
            var scriptBuilder = new TagBuilder("script");
            scriptBuilder.Attributes["type"] = "text/javascript";
            scriptBuilder.Attributes["src"] = script;
            sb.AppendLine(scriptBuilder.ToString(TagRenderMode.Normal));
        }
        return new HtmlString(sb.ToString());
    }

    public static void RegisterScript(this HtmlHelper htmlHelper,string script)
    {
        var ctx = htmlHelper.ViewContext.HttpContext;
        var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext);
        var registeredScripts = ctx.Items["_scripts_"] as Stack<string>;
        if (registeredScripts == null)
        {
            registeredScripts = new Stack<string>();
            ctx.Items["_scripts_"] = registeredScripts;
        }
        var src = urlHelper.Content(script);
        if (!registeredScripts.Contains(src))
        {
            registeredScripts.Push(src);
        }
    }
}

然后在你的_Layout.cshtml中:

@Html.RegisteredScripts()

在你的部分:

@{Html.RegisterScript("~/scripts/foo.js");}

(编辑:李大同)

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

    推荐文章
      热点阅读