在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()的代码,这似乎不是我的智能解决方案。
我做的事让jQuery的做后装在我的局部视图我的脚本运行和视图组件我用了“DOMContentLoaded”活动页面被加载完成后,装入所有我的jQuery的JS脚本。这样一来,我可以推迟的jQuery的负荷,而且还有我的网页上jQuery代码。
<script>
window.addEventListener('DOMContentLoaded',
function() {
$('body')....
});
</script>
你的问题是可以解决的,我回答这个帖子中提到:How to render scripts, generated in TagHelper process method, to the bottom of the page rather than next to the tag element?
综上所述,你可以创建一个对标签助手,一个可以位于局部视图,并且只存储了在临时词典内容,并呈现在适当的位置上的内容(例如在布局页)其他。我用它广泛地呈现小动态创建的脚本作为身体的最终脚本。
希望能帮助到你。
老实说,我会做一个退一步,在建筑看起来再次,如果你有这样的困境。
为什么不添加到所需的脚本,将一对夫妇的意见/局部视图中使用的主要布局?在ASP.NET MVC,您可以使用捆绑的机制(或者你可以写我们自己) - 缩小,并与其他需要捆扎在一起。这不会是重...
你的方法看起来不必要的复杂。