2011-04-13 63 views
0

我有一个基于我数据库中的数据的ViewModels列表视图。我列出了这个列表,但是我希望列表在数据库中的数据更改时在给定的时间间隔(5秒)内刷新。我在我的控制器中有一个更新ViewModels的Action。我使用MVC 3和Razor。 我想一些JavaScript/jQuery是必要的。间隔刷新viewmodel mvc

我的脚本:

<script type="text/javascript"> 
$(document).ready(function() { 
    var hdRaceId = $("#hdRaceId"); 

    setInterval("GetList()", 5000); 
    function GetList() { 
     $.get("/Timer/Update/?id=" + hdRaceId.val()); 
    } 

我在我的控制器操作:

 public ActionResult Update(int id) 
    { 
     var raceintermediates = RaceIntermediateModel.GetRaceintermediatesForRace(id); 
     return View("Speaker", raceintermediates); 
    } 

回答

3

如果您想刷新DOM的某个部分,您需要为您的AJAX请求定义成功回调。就像这样:

window.setInterval(function() { 
    var hdRaceId = $('#hdRaceId').val(); 
    var updateUrl = '@Url.Action("Update", "Timer")'; 
    $.get(updateUrl, { id: hdRaceId }, function(result) { 
     $('#someDivId').html(result); 
    }); 
}, 5000); 

,你有一些DIV将承载局部视图结果:

<div id="someDivId"></div> 

也像IE浏览器的一些可能会缓存GET请求。为了避免这种情况,你可以使用下面的代码:

window.setInterval(function() { 
    var hdRaceId = $('#hdRaceId').val(); 
    var updateUrl = '@Url.Action("Update", "Timer")'; 
    $.ajax({ 
     url: updateUrl, 
     type: 'GET', 
     data: { id: hdRaceId }, 
     cache: false, 
     success: function(result) { 
      $('#someDivId').html(result); 
     } 
    }); 
}, 5000); 
+0

这对我来说是谢谢:D – Arnstein 2011-04-13 13:07:17

0

的setTimeout(GetRefereshedList,5000);

和GetRefreshedList ..你可以使用$ .ajax()方法从服务器获取新列表并在客户端更新所有视图。

如果你可以分享你的代码,我可以扩展一点。

+0

我试过了,如果我使用setInterval(“GetList()”,5000);与引号我得到“GetList()”是不确定的,如果我删除引号,我会得到另一个错误消息,问我是否忘记了引号。 – Arnstein 2011-04-13 12:41:41

+0

谢谢你的帮助,你把我放在正确的轨道:) – Arnstein 2011-04-13 13:07:34