问题描述
|
我有一个带有viewmodels列表的视图,该视图基于数据库中的数据。我显示了此列表,但是我希望在数据库中的数据更改时以给定的间隔(5秒)刷新列表。我的控制器中有一个可更新viewmodel的Action。我使用MVC 3和Razor。
我猜需要一些JavaScript / jQuery。
我的剧本:
<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);
}
解决方法
如果要刷新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);
,setTimeout(GetRefereshedList,5000);
在GetRefreshedList ..中,您可以使用$ .ajax()方法从服务器获取新列表并在客户端上更新所有视图。
如果可以共享您的代码,我可以再扩展一点。