首页 > 解决方案 > 是否可以控制 HTML Razor 组件的渲染顺序?

问题描述

我正在尝试渲染我的一个页面,并且我Html.RenderAction()在要显示的 div 顶部有一个调用。我想document.ready()从通过我的 RenderAction 调用显示的页面内部调用我的 js 初始化方法之一,但它似乎document.ready()在调用后页面中的 html 之前触发Html.RenderAction()

因此,init 函数正在检查自在 JQuery 完成之前被调用以来尚未加载的 kendo 元素的数据,并且仅将应为 kendo 输入的输入视为默认 html<input>元素。

换句话说,有没有办法延迟 RenderAction 的加载/调用,直到页面内部加载?或者我应该使用一些丑陋的 CSS 将我需要的部分保留在我的 div 的顶部?下面是我的代码的非常基本的摘要:

<html>
...
<div>
  @Html.RenderAction("File that calls init() method")
  <...rest of page that I need to load first, including kendo text boxes/>
</div>

</html>

调用 init() 方法的文件

<div>
...
</div>
<script src="...">
  $(document).ready(function() {
    myJs.init(params)
  }
</script>


现在我已经在其他地方实现了下面的答案,我意识到当从document.readyto切换时window.on('load',...),它现在破坏了另一个类似工作的视图,但@Html.RenderAction调用位于底部:

...
<div>
  <>page including kendo inputs</>
  @Html.RenderAction("different file that calls same init() method")
</div>

</html>

基本上,document.ready如果剃须刀在剑道之前,对我有用,但反之则不然——window.on('load',function(){...})反之亦然。


更新:经过大量试验和错误寻找解决方案后,我最终不得不重新排列我的页面 - 似乎没有简单的方法可以解决剃须刀在 CSHTML 页面上加载的顺序

标签: javascriptc#jqueryhtmlrazor

解决方案


这可能有效,尝试使用 $(window).load(function() 而不是 $(document).ready(function()

<div>
...
</div>
<script src="...">
  $(window).load(function() {
    myJs.init(params)
  }
</script>

来自以下链接:“在完整页面完全加载时执行,包括所有框架、对象和图像”

jQuery - $(document).ready 和 $(window).load 有什么区别?


推荐阅读