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

问题描述 投票:7回答:4

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

干杯蒂姆

jquery asp.net-mvc asp.net-mvc-4 asp.net-optimization bundling-and-minification
4个回答
6
投票

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

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

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

你可以很容易地为自己实现一个解决方案。这是a SO post that will get you started


5
投票

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

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


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;
    }

-1
投票

如果您使用局部视图,则需要引用脚本库

在页面顶部只添加所需的脚本添加

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

然后身体标签底部添加

@RenderSection("scripts", required: false)

任何其他页面扩展脚本部分就像

@section scripts{
    <script src="/Scripts/jquery.validation.js" type="text/javascript"></script>
}
© www.soinside.com 2019 - 2024. All rights reserved.