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