【问题标题】:SetInterval and SetTimeout not working when trying to load a Partial View尝试加载局部视图时,SetInterval 和 SetTimeout 不起作用
【发布时间】:2015-06-14 15:29:14
【问题描述】:

我正在尝试使用JQueryASP.Net MVC 应用程序中重新加载PartialView

我的代码:

<div class="partial">
     @Html.Action("GetRemainingSeats", "Layout")
</div>
<script src="@Url.Content("~/Scripts/jquery-1.10.2.min.js")"></script>
<script type="text/javascript">
            setTimeout(
            $(function () {
                setInterval(function () { $('#partial').load('@Html.Action("GetRemainingSeats", "Layout")'); }, 5000)
            }), 6000);
</script>

部分视图已正确加载,但之后会立即再次执行操作,无需等待setTimeout 函数计时器结束。之后它将停止做任何事情。

编辑:PartialView 里面有一张桌子,上面有电影院的演出以及每场演出的剩余座位数。所以我希望它在几秒钟内更新,以便员工可以看到还有多少座位可供演出。

我正在使用超时和setinterval 函数,因为在pageload 上调用了该操作。之后我希望它在开始间隔之前等待几秒钟

【问题讨论】:

  • @Html.Action() 是错字吗(应该是@Url.Action())?
  • 您的问题缺少一件事。你想达到什么目标?它将帮助其他人解决问题,否则您的代码似乎在浏览器中玩捉迷藏。
  • 还要说明需要同时使用setTimeoutsetInterval..
  • Url.Action() 不会做任何事情,就像使用 /Layout/GetRemainingSeats 不会做任何事情一样。 Html.Action() 将运行,但只运行一次,无需等待超时。
  • 当然Html.Action 只会运行一次。它是一种调用子操作的方法,并且仅在呈现视图时才解析一次。你需要Url.Action()

标签: javascript jquery asp.net asp.net-mvc-5 asp.net-mvc-partialview


【解决方案1】:

您的脚本试图将 html 加载到一个不存在的元素中(您只有一个带有 class="partial" 的元素,而不是 id="partial"。您还需要使用 @Url.Action(),而不是 @Html.Action()(这是调用子操作的助手 - 它不会生成 .load() 方法所期望的 url。您需要进行以下更改

html

<div id="partial"> // change this to specify the id attribute
    @Html.Action("GetRemainingSeats", "Layout")
</div>

脚本

$(function () {
    setInterval(function () {
        $('#partial').load('@Url.Action("GetRemainingSeats", "Layout")'); }, 5000) // use @Url.Action()
    }), 6000);

【讨论】:

    【解决方案2】:

    我真的不明白你为什么同时使用 timeout 和 setinterval 方法,因为它们第一次工作相同,如果你想在 4 秒后刷新 div,坚持使用 setInterval 方法,否则如果你只想刷新一次,使用 setTimeout方法

    var wait = setTimeout(
    $(function () {
     var s = setInterval(function () {       
             clearInterval(s); // you need to remove the interval if you want to run it once
             $('#partial').load('/Layout/GetRemainingSeats'); 
    
         }, 4000)
    }), 6000);
    

    另外,你需要改变

    <script src="@Url.Content("~/Scripts/jquery-1.10.2.min.js")"></script>
    

     <script src='@Url.Content("~/Scripts/jquery-1.10.2.min.js")'></script>
    

    【讨论】:

    • 我需要超时,这样部分视图就不会在页面加载时加载两次。我希望它在开始间隔之前等待几秒钟。当我使用您的代码时(我删除了 clearInterval)它不会再次调用该操作,当我使用 @Html.Action 时它只会调用一次操作然后停止间隔。
    猜你喜欢
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多