3

在 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 等……它们是强类型的。

在这些 View 文件中,脚本标签位于 内<body>,但是如何在标签之前将这些标签添加到页面底部</body>

4

2 回答 2

5

您正在寻找的是部分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>
}
于 2012-11-02T15:50:13.140 回答
4

您可以构建一个 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>
)
于 2012-11-02T15:52:27.947 回答