Создание собственного расширения HTML для отображения скриптов в конце документа из частичных представлений - PullRequest
0 голосов
/ 19 октября 2018

Я хочу, чтобы мои скрипты загружались в конце документа из моих частичных представлений.Короче говоря, я хочу реализовать расширение для 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>

И в моем частичномviews:

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

В этом решении есть одна вещь, которую я не понимаю: файл макета всегда выполняется первым, поэтому сначала выполняется @ Html.RenderScripts (), а @ Html.Script (...) после этого скрипты вообще не будут загружаться.Если я вызываю @ Html.RenderScripts () в частичном представлении, это работает, но это бесполезно, потому что скрипты загружаются в середине документа.

Так что, есть предложения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...