0

我有 3 个部分视图

视图 1:

//_yard.cshtml
@model Yard
<div>@Model.Name</div>
<div class="yard"></div>

@foreach(var house in Model.Houses)
{
  <script  type="text/javascript">
  $(document).ready(function{
   $(".yard").load("/community/Houses");
  });
  </script>
}

查看 2

//_houses.cshtml
@model House
<div>@Model.Name<div>
<div class="house"></div>
@foreach(var level in Model.levels)
{
  <script  type="text/JavaScript">
  $(document).ready(function{
    $(".house").load("/Community/Levels");
  });
  </script>
}

视图 3:

//_levels.cshtml
@model Level
<div>@Model.Name<div>
<div class="room"></div>
@foreach(var room in Model.Rooms)
{
  <script  type="text/JavaScript">
  $(document).ready(function{
    $(".room").load("/Community/Rooms");
  });
  </script>
}

上面的示例显示我正在使用 加载View 1另一个视图中的jQuery Load()a ,然后加载View 2withing View 1,然后以此类推,但是,第一个 load() 工作正常,但后续加载不会触发。

我认为这是由于该$(document).ready();功能未重置,但是,我不确定如何在每次加载时重置它。

使用 MVC解决 的问题,默认模板在页面底部呈现 jQuery 脚本。我将它移到顶部,并且 ajax 负载工作。

我知道这没有任何意义,但它解决了问题。在对为什么这可以解决问题进行更多调查后,我将更新问题。

4

1 回答 1

2

编辑: 一般来说,下面的答案很有帮助,但我认为真正的问题是 JavaScript 中的语法错误。代码行最后.load()都有一个太多)。修复该问题,通过检查浏览器中的 JavaScript 控制台确保没有更多语法错误,然后也使用以下建议 :-)

考虑$(document).ready();被“重置”是没有帮助的,因为它不是也不能被“重置”。

这是一个在 DOM 第一次完全加载并准备好被 JavaScript 操作时触发的事件。该事件仅在第一次加载网页时发生一次。任何后续的 AJAX 请求都不会$(document).ready();在页面上触发新事件。然而,它们会触发其他事件——但不会$(document).ready();

$(document).ready();从视图 2 和 3 中删除,您的代码将起作用。(提示:您应该将 JavaScript 包装在<script>标签中,否则在某些浏览器中可能会出现一些奇怪的行为)。

AJAX 请求完成时触发的事件可能会帮助您:

  • $.ajax();有一个success//处理程序errorcomplete
  • .load();有一个complete处理程序。
于 2013-02-22T08:48:45.713 回答