ASP.NET MVC 在部分视图中加载脚本

2024-02-01

我的整个网站是一个 Ajax 网站,因此我的所有视图(布局除外)都可以正常加载或通过 ajax 操作链接加载。 如果我将 Javascipt 文件与部分视图一起放入,那么所有代码​​都会按预期工作,但脚本会被多次加载(从而使用户下载更多脚本,所有脚本也不会由于某种原因被缓存)。

如果我将脚本文件放入布局中,那么它们只会加载一次,但是如果加载了部分视图,则该部分视图的 JS 代码显然不起作用,因为当部分视图未加载时脚本已经加载呈现。

我的问题是,如何使脚本仅加载一次,但又以某种方式让它们影响部分视图?

索引视图:

<script src="/Scripts/Build/module.min.js"></script>
<script src="/Scripts/Build/upload-index.min.js"></script>

Layout:

<li>
    @Ajax.ActionLink("Upload", "Index", "Upload", new {Area = "Music"}, new AjaxOptions {HttpMethod = "GET", UpdateTargetId = "body-wrapper", InsertionMode = InsertionMode.Replace, OnSuccess = "updateHistory", AllowCache = true }, new {@class = "nav-link"})
</li>

You can see the scripts getting loaded multiple times if they are in the partial view: enter image description here


脚本不应位于部分视图中,而只能位于主视图或其布局中。您不仅遇到自己发现的重复问题,而且还可能导致其他问题,例如使现有脚本无效。

如果您需要处理与动态添加的项目关联的事件,请使用事件委托.on()功能。例如

$.(container).on('click', '.someclass', function() { .... }

将处理元素的点击事件class="someclass"已作为子元素添加container即使它们是在 DOM 初始加载后添加的。

如果您需要将插件附加到动态添加的元素,请在将元素添加到 DOM 后附加它,例如

$.get(url, function(html) {
    $(container).append(html); // append the partial view
    $(container).find('someclass:last')..dropzone({ .... }); // attach plugin
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET MVC 在部分视图中加载脚本 的相关文章

随机推荐