javascript - 在 ASP.NET Core PartialView 中加载脚本后呈现脚本部分

标签 javascript jquery asp.net-core asp.net-core-mvc asp.net-core-1.0

在 ASP.NET Core 应用程序中,我有一个带有小部件的仪表板。每个 widget 都有自己的 PartialViews,因此整个页面的生成方式如下:

-Layout.cshtml

--Dashboard.cshtml

--- Widget1.cshtml

--- Widget2.cshtml

根据快速页面加载时间的最佳实践,JavaScript 在关闭前加载 </body> Layout.cshtml 中的标记。在那之后,有一个自定义 JS 部分,我通常使用它来在页面加载时启动对象。所以这部分看起来像这样:

<script asp-append-version="true" type="text/javascript" src="~/clientscript/page.min.js"></script>
@RenderSection("Js", required: false)

在我的 View 中,它使用 Layout.cshtml 作为布局(在这个例子中,它的 Dashboard.cshtml),我可以定义一个像这样的部分

@section Js {
    // Js Code here
}

在包含所有脚本文件的脚本标签之后呈现。所以我可以确定,所有依赖项(如 jQuery 或自定义类)在这里都是可用的。

但是我还需要在像 Widget1.cshtml 这样的小部件中执行此操作。问题是:我在 Dashboard.cshtml 中加载了 PartialView Widget1.cshtml。在documentation is written ,这是不可能的:

If you declare a Razor section in a partial view, it will not be visible to its parent(s); it will be limited to the partial view.

但这正是我所需要的。有没有办法解决这个限制?简而言之,目标是将 JavaScript 从 PartialView 注入(inject) LayoutView,它们之间有一个常规 View 。

我知道的唯一方法是使用 setInterval() 的低间隔(如 50 毫秒),并在那里检查 jQuery 或我的某些自定义类是否在循环中定义,直到它们被定义。是的,它是一个 JS 解决方案。但它可以直接在 PartialView 中包含脚本 block ,而无需使用部分。当你依赖像 jQuery 这样的单个变量时,它非常适合。

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

最佳答案

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

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

        });
</script>

关于javascript - 在 ASP.NET Core PartialView 中加载脚本后呈现脚本部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41575227/

相关文章:

javascript - 为什么要执行前一个屏幕组件中的 socket.on() ?

javascript - "this"在函数的调用语句中作为另一个函数的方法引用什么

javascript - react native : rendering conditional component based on state value change in Modal

javascript - ajax 加载内容中的 Ajax 链接

java - 使用 jax-rs 使用 jquery 下载 pdf

asp.net-core - 在 .NET Core OpenID Connect 中间件中重定向?

javascript - 找到数组中键的所有现有值,从另一个数组中打印相应的数据

angular - 身份服务器 4 : force user to login with provider after he closes the browser/tab

c# - 告诉 Swashbuckle 只查找具有 ApiControllerAttribute 的 Controller

javascript - 如何在滚动上为 div 设置动画?