创建自定义HTML扩展以从局部视图在文档末尾呈现脚本

时间:2018-10-19 19:05:38

标签: javascript c# asp.net asp.net-core

我希望我的脚本从局部视图中加载到文档的末尾。简而言之,我想实现HtmlHelper的扩展。为此,我正在尝试以下解决方案,这是我的扩展方法:

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

    public static HtmlString RenderScripts(this IHtmlHelper htmlHelper)
    {
       foreach (object key in htmlHelper.ViewContext.HttpContext.Items.Keys)
       {
          if (key.ToString().StartsWith("_script_"))
          {
             var template = htmlHelper.ViewContext.HttpContext.Items[key] as Func<object, HelperResult>;
             if (template != null)
             {
                 htmlHelper.ViewContext.Writer.Write(template(null));
             }
          }
       }
       return HtmlHelper.Empty;
    }
}

在_Layout.cshtml中,我写了以下内容:

<body>
<!--some code-->
@Html.RenderScripts()
</body>

在我的部分观点中:

@Html.Script(@<script src="@Url.Content("~/Scripts/sampleJs.js")" type="text/javascript"></script>)

此解决方案中有一件我不了解的事情:总是首先执行布局文件,因此先执行@ Html.RenderScripts(),然后再执行@ Html.Script(...),所以脚本将根本不会加载。如果我在局部视图中调用@ Html.RenderScripts(),它可以工作,但是却无济于事,因为脚本加载在文档的中间。

那么有什么建议吗?

0 个答案:

没有答案