2011-09-10 214 views
-1

我想在我的页面中创建一个机制,使其每秒使用Ajax刷新表数据。我怎样才能做到这一点?如何在MVC中使用Ajax每秒刷新我的页面?

+1

[每秒刷新一次?( http://stackoverflow.com/questions/1508765/how-to-auto-refresh-mvc-partialview-every-second)[为什么?](http://nuget.org/List/Packages/SignalR) – bzlm

+1

??只需使用setInterval并将您的逻辑放在那里。 – tjameson

回答

8

假设你有一个控制器的行动,将返回表,你可以使用一个局部视图:

<script type="text/javascript"> 
    $(function() { 
     setInterval(loadTable,1000); // invoke load every second 
     loadTable(); // load on initial page loaded 
    }); 

    function loadTable() { 
     $('#tablecontainer').load('/controller/tabledata'); 
    } 
</script> 

<div id="tablecontainer"> 
</div> 

你必须你的资料表操作返回一个包含表的局部视图。

<table> 
    <thead>...</thead> 
    <tbody>...</tbody> 
</table> 

编辑通过点击处理程序建立(script标签略)

$(function() { 
    var timer; 
    $('#enableCheckbox').change(function() { 
     if ($(this).find(':checked').length) { 
      timer = setInterval(loadTable,1000); // set up timer 
      loadTable(); 
     } 
     else if (timer) { // stop the interval timer 
      clearInterval(timer); 
      timer = null; 
     } 
    }); 
}); 

function loadTable() { 
    $('#tablecontainer').load('/controller/tabledata #innercontainer'); 
} 

完整视图(至少包含以下)

<div id="tablecontainer"> 
<div id="innercontainer"> 
<table> 
    <thead>...</thead> 
    <tbody>...</tbody> 
</table> 
</div> 
</div> 
+3

这将是一个好主意,使用Ajax响应回调,然后(在回调中)建立一个新的'setTimeout(loadTable,1000);'。这样一来,如果某些Ajax请求花费更长时间,浏览器就不会爆炸:'P' –

+0

嗨感谢您的代码,但问题是我的整个视图每秒都会刷新,因为函数codeloadTable() {('#tablecontainer')。load('/ task2/index'); ('/ task2/index #tablecontainer');'我只想刷新#tablecontainer div – TeaLeave

+0

@Cal - 你可以使用散列'$('#tablecontainer')来在URL中添加一个过滤器。更好的做法是重构你的动作/视图,让一个动作只返回部分或者可能让动作知道请求的来源('Request.IsAjaxRequest()')并返回局部视图。 – tvanfosson