Javascript 在ASP.NET Core PartialView中加载脚本后的“渲染脚本”部分

Javascript 在ASP.NET Core PartialView中加载脚本后的“渲染脚本”部分,javascript,jquery,asp.net-core,asp.net-core-mvc,asp.net-core-1.0,Javascript,Jquery,Asp.net Core,Asp.net Core Mvc,Asp.net Core 1.0,在ASP.NET核心应用程序中,我有一个带有小部件的仪表板。每个小部件都有自己的PartialView,因此整个页面将按以下方式生成: -Layout.cshtml --Dashboard.cshtml ---Widget1.cshtml ---Widget2.cshtml 按照快速页面加载时间的最佳实践,在Layout.cshtml中关闭标记之前加载JavaScript。之后,还有一个自定义JS部分,我通常使用它在页面加载时初始化对象。所以这一部分看起来像这样: <script asp-

在ASP.NET核心应用程序中,我有一个带有小部件的仪表板。每个小部件都有自己的PartialView,因此整个页面将按以下方式生成:

-Layout.cshtml

--Dashboard.cshtml

---Widget1.cshtml

---Widget2.cshtml

按照快速页面加载时间的最佳实践,在Layout.cshtml中关闭
标记之前加载JavaScript。之后,还有一个自定义JS部分,我通常使用它在页面加载时初始化对象。所以这一部分看起来像这样:

<script asp-append-version="true" type="text/javascript" src="~/clientscript/page.min.js"></script>
@RenderSection("Js", required: false)
在包含所有脚本文件的脚本标记之后呈现。所以我可以肯定,所有依赖项,如jQuery或自定义类,都可以在这里使用

但我也需要在Widget1.cshtml之类的小部件中这样做。问题是:我在Dashboard.cshtml中加载了PartialView Widget1.cshtml。事实上,这是不可能的:

如果在局部视图中声明剃须刀部分,则其父视图将看不到该部分;它将仅限于局部视图

但这正是我需要的。有没有办法绕过这个限制?很快,目标是将JavaScript从PartialView注入LayoutView,并在它们之间使用常规视图

我知道的唯一方法是使用setInterval()的低间隔,比如50ms,然后检查jQuery或我的一些自定义类是否在循环中定义,直到它们被定义为止。是的,这是一个JS解决方案。但是它可以直接在PartialView中包含脚本块,而无需使用节。当您依赖于像jQuery这样的单个变量时,它非常适合


但我需要等待自定义类加载。它们包含在jQuery之后。因此,编写像
waitfortypeload(type,callback)
这样的泛型函数是不可能的。这将导致我总是编写原始的setInterval()代码,这对我来说似乎不是一个明智的解决方案

老实说,如果你遇到这样的困境,我会退后一步,再看看建筑

为什么不在主布局的几个视图/局部视图上添加所需的脚本?在ASP.NET MVC中,您可以使用绑定机制(或者您可以编写自己的绑定机制)——缩小它们并将它们与其他需要的绑定。不会很重的


您的方法看起来不必要的复杂。

在Jquery加载完成后,我在部分视图和视图组件中运行了一些脚本,在页面加载完成后,我使用“DOMContentLoaded”事件加载了所有Jquery js脚本。这样我就可以推迟jQuery的加载,并且页面上仍然有jQuery代码

<script>
    window.addEventListener('DOMContentLoaded',
        function() {
            $('body')....

        });
</script>

window.addEventListener('DOMContentLoaded',
函数(){
$('body')。。。。
});

你的问题可以解决,正如我在回答这篇文章时提到的:

总之,您可以创建一对标记帮助器,一个位于局部视图中,只将其内容存储在临时字典中,另一个在适当位置(例如,在布局页面中)呈现内容。我广泛使用它来渲染动态创建的小脚本,作为主体的最终脚本


希望能有所帮助。

也许我误解了您的需要,但局部视图仍然可以访问父级渲染的资产(如css、js等)。您的意思是希望在
widget1.cshtml
中运行脚本,但支持脚本尚未呈现?如果是这样的话,您需要编写一个js事件,让您知道它的加载时间。ASP.NET MVC核心绑定的工作方式不同,在这种情况下无法正常工作。
<script>
    window.addEventListener('DOMContentLoaded',
        function() {
            $('body')....

        });
</script>