我希望我的脚本从局部视图中加载到文档的末尾。简而言之,我想实现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(),它可以工作,但是却无济于事,因为脚本加载在文档的中间。
那么有什么建议吗?