2011-04-13 59 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