在Layout.cshtml中的结束标记之前加载JavaScript 。之后,有一个自定义JS的部分,我通常用它来在页面加载时初始化对象。因此,本节如下所示:
@RenderSection("Js", required: false)
在使用Layout.cshtml作为布局的视图(在此示例中,其Dashboard.cshtml)中,我可以定义一个部分,例如
@section Js { // Js Code here }
在包含所有脚本文件的script标记之后呈现。因此,我可以确定,这里有jQuery或自定义类之类的所有依赖项。
但是我还需要在Widget1.cshtml之类的小部件中执行此操作。问题是:我在Dashboard.cshtml中加载PartialView Widget1.cshtml。在文档中写道,这是不可能的:
如果在局部视图中声明“剃刀”部分,则其父级将不可见;它将限于局部视图。
但这正是我所需要的。有没有办法解决此限制?不久,目标是将JavaScript从PartialView注入到LayoutView,并在它们之间插入常规View。
我知道的唯一方法是使用setInterval()并以低间隔(例如50ms)使用,并检查是否在循环中定义了jQuery或我的某些自定义类,直到它们被定义为止。它是一个JS解决方案。但这使得可以将脚本块直接包含在PartialView中,而无需使用各节。当您依赖jQuery之类的单个变量时,它非常适合。
但是我需要等待自定义类被加载。它们包含在jQuery之后。因此,waitForTypeLoaded(type, callback)
不可能编写类似的泛型函数。这会使我总是写原始的setInterval()代码,这对我来说似乎不是一个明智的解决方案。
在完成Jquery加载后,我做了一些使我的脚本运行的操作,该操作在我的局部视图和视图组件中,我使用“ DOMContentLoaded”事件在页面完成加载后加载了所有jQuery js脚本。这样,我可以推迟jQuery的加载,并在页面上仍然保留jQuery代码。