阻止ASP.NET MVC捆绑包多次加载

时间:2012-09-20 07:24:27

标签: jquery asp.net-mvc asp.net-mvc-4 asp.net-optimization bundling-and-minification

是否有一种内置的跟踪方法是否已经加载了捆绑包?我有几个编辑视图,例如需要jquery和jquery.Validate等库。我不需要在主布局页面上引用它。 由于页面可能包含几个不同的条件库...理想情况下,我希望@ scripts.Render知道我是否已经引用了一个库并阻止它重新加载。

干杯 添

4 个答案:

答案 0 :(得分:6)

我认为Hao Kunguser108都有你的答案。

Hao Kung正在解决系统能够知道您已经在页面上包含了一个包并避免添加副本的能力。这类似于WordPress's enqueue script/style所做的。 MVC还没有这个。你必须自己建造它。

user108正在为您的问题提供可能的解决方案。他/她说,在您的布局中,您可以创建一个可选的“脚本”部分。然后,在需要jquery验证代码的视图中,您可以将其包含在布局的“脚本”部分中。这将完成您正在寻找的大部分内容。唯一不起作用的地方是,如果在同一页面上有多个视图部分,则都需要jquery验证码。

您可以相当轻松地自行实施解决方案。这是a SO post that will get you started

答案 1 :(得分:5)

听起来你要求的东西更像是资产管理,你可以不止一次注册脚本,并且有一个API可以自动进行重复数据删除并呈现相应的列表。这是我们的待办事项列表,但它目前还不是API的一部分。

如果这是您想要的,您可以在我们的codeplex网站上投票: This issue

答案 2 :(得分:2)

试试这个:

    public static MvcHtmlString RequireClientScript(this HtmlHelper helper, string scriptPath)
    {
        var scripts = helper.ViewContext.HttpContext.Items["client-script-list"] as Dictionary<string, string> ?? new Dictionary<string, string>();

        if (!scripts.ContainsKey(scriptPath))
        {
            var sb = new StringBuilder();

            var scriptTag = new TagBuilder("script");

            scriptTag.Attributes.Add("type", "text/javascript");
            scriptTag.Attributes.Add("src", scriptPath);

            sb.AppendLine(scriptTag.ToString());

            scripts.Add(scriptPath, scriptPath);

            helper.ViewContext.HttpContext.Items["client-script-list"] = scripts;

            return new MvcHtmlString(sb.ToString());
        }

        return MvcHtmlString.Empty;
    }

答案 3 :(得分:-1)

如果您使用的是局部视图,则需要参考脚本库

页面顶部的

仅添加所需的脚本添加,如

@Scripts.Render("~/bundles/jquery")

然后身体标签底部添加

@RenderSection("scripts", required: false)

任何其他页面扩展脚本部分,如

@section scripts{
    <script src="/Scripts/jquery.validation.js" type="text/javascript"></script>
}