【问题标题】:SetTimeout to update a Partial View in MVC3 executes randomlySetTimeout 更新 MVC3 中的局部视图随机执行
【发布时间】:2011-08-10 06:54:40
【问题描述】:

我正在开发一个使用 asp.NET mvc3 的应用程序。 我创建了一个局部视图,并在视图中调用了这个局部视图,这样我就可以在不重新加载页面的情况下更新一个 div。 我使用 setTimeout(但我也尝试过 setInterval)来定义刷新时间。 问题是它不起作用,它随机刷新div,而不是按照我设置的时间,并且没有我能理解的逻辑,有时它刷新两次,有时它等待,但永远不会超过时间我设置。 这是局部视图的代码。在视图中我只调用局部视图。

<script type="text/javascript">
var st;
function updateDiv() {
    st = null;
    clearTimeout(st);
    console.log("posting");
    $.post('@Url.Action("RefreshSelfUpdatingPartial")', function (data) {
        $('#SelfUpdatingPartialDiv').hide().slideDown("slow").html(data);
        //wait 15 seconds
        st = setTimeout(updateDiv, 15000);
    });
}
updateDiv();
</script>
<div id="SelfUpdatingPartialDiv">
test

</div>

【问题讨论】:

  • RefreshSelfUpdatingPartial 是控制器中的操作?

标签: c# javascript asp.net ajax asp.net-mvc-3


【解决方案1】:

"这是局部视图的代码。在视图中我只是调用局部视图。"

如果以上所有代码都在部分视图中,这是否意味着 $.post() 将把以上所有代码加载到 &lt;div&gt; 中,从而导致上面嵌套的第二个副本本身?随着超时的运行,它只会在自身内部嵌套越来越多的副本。

我建议您将以上所有内容移到主视图中,然后部分视图应仅返回您想在 &lt;div&gt; 中看到的任何文本(并且没有 JavaScript)。

(如果我引用的语句不是您的意思,那么请更新您的帖子以更清楚地解释上述代码的位置以及$.post('@Url.Action("RefreshSelfUpdatingPartial")) 实际返回的内容。)

(另外,就像 Alex 所说,在将 st 变量传递给 null 之前不要将其设置为 clearTimeout() - 尽管我认为您可以删除这两行,因为您不需要清除超时在它已经被触发之后。)

【讨论】:

  • 我只是在实现这个逻辑:stackoverflow.com/questions/5866326/updatepanel-in-razor-mvc-3/… 在 MVC3 中实现一个“UpdatePanel”。
  • 好的,但是说(基本上)“我从别处复制了这段代码”并没有解决我在第一段中所问的问题,特别是考虑到你已经说过它没有工作。换句话说,当您的$.post() 回调执行data 参数中实际返回的内容时?请使用console.log(data); 查找并回复我。
  • 好的现在我明白你在问我什么了,我使用了 console.log(data) 并返回了我在第一篇文章中发布的所有确切代码,也许这就是问题所在?但它只是刷新了 div 为什么要以嵌套的方式复制自己?
  • 您的回调函数正在将div 的内容设置为data 参数中返回的所有内容,这意味着您最终会得到两个脚本副本,然后这两个副本都在尝试更新div,并且两者都设置了超时 - 我认为这足以导致奇怪的随机时间。所以请尝试我已经建议的方法:将代码的 all 移动到主视图(包括脚本和 div)中,然后在局部视图中返回您想在 @ 中看到的任何文本987654335@(没有div 标签本身,只有内容)。
  • @Atilla,您的意思是返回的数据还包括您问题中的脚本?那么问题来了。
猜你喜欢
  • 1970-01-01
  • 2011-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多