渲染脚本,脚本节在ASP.NET核心PartialView加载后

问题描述 投票:3回答:3

在ASP.NET应用程序的核心,我和小部件的仪表板。每个小部件都有自己的PartialViews,所以在下面的方式产生完整的页面:

-Layout.cshtml

--Dashboard.cshtml

--- Widget1.cshtml

--- Widget2.cshtml

根据快速页面加载时间遵循最佳实践,JavaScript在Layout.cshtml收盘</body>标记之前加载。在此之后,有一个自定义的JS,我通常使用启动页面加载对象的部分。因此,这部分是这样的:

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

在我的意见,这是使用作为Layout.cshtml布局(在这个例子中,其Dashboard.cshtml),我可以定义像部

@section Js {
    // Js Code here
}

这是一个包含所有脚本文件的脚本代码的呈现。所以,我可以肯定,像jQuery的或定制的类都依赖是avaliable这里。

但我也需要例如为此在小部件一样Widget1.cshtml。问题是:我加载PartialView Widget1.cshtml在Dashboard.cshtml。在documentation is written,这是不可能的:

如果您在声明的局部视图剃刀部分,它不会被其父(或多个)可见;将被限制在局部视图。

但是,这正是我需要的。有没有办法来解决这个限制?不久,我们的目标是从PartialView到LayoutView注入的JavaScript,与他们之间的定期查看。

我所知道的唯一方法是的setInterval的使用()与像50ms的低区间,并检查是否有jQuery的或我的一些自定义类的一个循环定义,直到他们。它是一种JS的解决方案是。但它能够直接包含在PartialView脚本块未做部分的使用。当你依赖于像jQuery一个变量,它非常适合。

但我需要等待得到加载自定义类。他们的jQuery后会包括在内。所以写像waitForTypeLoaded(type, callback)一个通用的功能是不可能的。这将导致我总是写原始的setInterval()的代码,这似乎不是我的智能解决方案。

javascript jquery asp.net-core asp.net-core-mvc asp.net-core-1.0
3个回答
5
投票

我做的事让jQuery的做后装在我的局部视图我的脚本运行和视图组件我用了“DOMContentLoaded”活动页面被加载完成后,装入所有我的jQuery的JS脚本。这样一来,我可以推迟的jQuery的负荷,而且还有我的网页上jQuery代码。

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

        });
</script>

0
投票

你的问题是可以解决的,我回答这个帖子中提到:How to render scripts, generated in TagHelper process method, to the bottom of the page rather than next to the tag element?

综上所述,你可以创建一个对标签助手,一个可以位于局部视图,并且只存储了在临时词典内容,并呈现在适当的位置上的内容(例如在布局页)其他。我用它广泛地呈现小动态创建的脚本作为身体的最终脚本。

希望能帮助到你。


-1
投票

老实说,我会做一个退一步,在建筑看起来再次,如果你有这样的困境。

为什么不添加到所需的脚本,将一对夫妇的意见/局部视图中使用的主要布局?在ASP.NET MVC,您可以使用捆绑的机制(或者你可以写我们自己) - 缩小,并与其他需要捆扎在一起。这不会是重...

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

© www.soinside.com 2019 - 2024. All rights reserved.