在MVC3中如何将所有脚本移动到页面底部的</body>之前?
Posted
技术标签:
【中文标题】在MVC3中如何将所有脚本移动到页面底部的</body>之前?【英文标题】:In MVC3 how to move all scripts to the bottom of the page before </body>? 【发布时间】:2012-11-02 15:41:21 【问题描述】:在 MVC3 中,我可以轻松地将 jQuery 脚本标签移动到页面底部“_Layout.vbhtml”
<script src="@Url.Content("~/Scripts/jquery-1.8.2.min.js")" type="text/javascript"></script>
但是,在 ASP.NET MVC3 中,当您使用编辑器模板创建控制器时,脚手架机制会执行大量工作,将文件添加到 Views 文件夹,例如 Create.cshtml、Delete.cshtml、Details.cshtml、Edit。 cshtml, 和 Index.cshtml 等等……它们是强类型的。
在这些视图文件中,脚本标签位于 <body>
内,但我如何将这些标签添加到页面底部紧挨在 </body>
标签之前的位置?
【问题讨论】:
MVC4 有脚本捆绑。在 MVC3 中,如果您始终使用完整视图并且没有部分视图,则可以为“脚本”创建一个部分,然后在主布局中您可以在底部(甚至头部)呈现它们。另一个缺点是它不适用于部分/ajaxed 视图。 【参考方案1】:你要找的是http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx的部分
在您的 </body>
标记上方添加一个部分。
@RenderSection("Scripts", false)
</body>
然后在您的视图中,您可以定义将出现在此部分中的内容。
@section Scripts
<script>
...
</script>
【讨论】:
这非常有效,除非您在局部视图中也有一个脚本部分,在这种情况下,只有第一个脚本部分会被渲染。 老实说,您不应该在代码中散布脚本。内联 我正在使用包含用于搜索和过滤等的 ajax 查找的部分视图。由于我在多个页面上使用它们,因此将脚本放在那里对我来说很有意义。我不知道最佳做法是什么,但它是一种适合我的方法。 规则 #1:为工作使用正确的工具。如果它适合你,那就继续走这条路。你没有说错,只是对不同的项目有不同的看法。【参考方案2】:你可以构建一个html扩展函数,像这样
/// <summary>
/// This section is for adding a script to the <head> tag from a partial view (or any other place)
/// </summary>
private const string SCRIPTBLOCK_BUILDER = "_ScriptBlockBuilder_";
public static MvcHtmlString Script(this HtmlHelper htmlHelper, Func<object, HelperResult> template)
htmlHelper.ViewContext.HttpContext.Items[SCRIPTBLOCK_BUILDER + Guid.NewGuid()] = template;
return MvcHtmlString.Empty;
public static IHtmlString RenderScripts(this HtmlHelper htmlHelper)
foreach (object key in htmlHelper.ViewContext.HttpContext.Items.Keys)
if (key.ToString().StartsWith(SCRIPTBLOCK_BUILDER))
var template = htmlHelper.ViewContext.HttpContext.Items[key] as Func<object, HelperResult>;
if (template != null)
htmlHelper.ViewContext.Writer.Write(template(null));
return MvcHtmlString.Empty;
那么你就可以使用这两个功能了。在您的 _Layout.cshtml 中,您将 @Html.RenderScripts()
放在您想要呈现所有脚本的位置。
然后像这样将所有脚本包装在视图中
@Html.Script(
@<script type="text/javascript">
// Your scripts
</script>
)
【讨论】:
以上是关于在MVC3中如何将所有脚本移动到页面底部的</body>之前?的主要内容,如果未能解决你的问题,请参考以下文章
Woocommerce 如何将优惠券表格移动到结帐页面的底部
Xamarin ContentPage.ToolbarItems移动到页面底部