2011-08-15 61 views
1

我已經編寫了一個簡單的程序,用於從WMI數據庫收集一些信息,例如當前的CPU使用情況。 我使用ActionResult索引函數在homecontroller文件中執行這些操作。然後我返回視圖並在主頁上顯示這些結果。使用asp.net進行異步自動刷新MVC 3

現在,我應該使用JQuery並每3秒刷新一次這些值。我不想重新加載整個頁面。但是,我從WMI收集的這些價值。

任何好的和簡單的(因爲我是一個在Javascript中的新手)建議?

回答

9

好的,你問了一個建議,所以我會盡量保持高級。

首先,你要實現兩個觀點:

  1. 指數 - 這是可以被索引的ActionResult functon返回控制器上你的看法。
  2. 統計 - 這是包含在索引視圖這樣的局部視圖

    <div id="refreshme"> 
        @Html.Partial("_Stats", Model.Stats) 
    </div> 
    

你會注意到,我在一個包含統計對象模型通過。這個統計數據對象被傳遞到你的「統計」視圖,它將知道如何渲染它。

接下來,您需要在您的HomeController中添加一個新的操作方法,您猜對了,Stats!這個ActionResult將只顯示Stats視圖並將其作爲HTML返回。您還需要設置的[HttpGet]標誌就可以了,因此可以接受GET請求:

[HttpGet] 
public ActionResult Stats(...) 
{ 
    //... 
    return View("_Stats", Model); 
} 

現在,對於JS方:

function refresh() { 
    $.get('/index/post', function(result) { 
     $('#refreshme').html(result); 
    }); 
} 
setInterval(refresh, 3000); 

所以目標是這樣:

  1. 將您想要刷新的部分從頁面的其餘部分中刪除並放入局部視圖中。
  2. 添加一個僅顯示該局部視圖的控制器操作方法。
  3. 在您的索引視圖中包含該部分視圖,其中包含一個容器,以便它可以輕鬆更新。
  4. 添加一個javascript函數,它將從控制器獲取最新的視圖渲染並覆蓋頁面上的當前統計信息。

希望這會讓你朝着正確的方向前進。

+0

感謝您的回覆。 我已經刪除了該部分,並把它放在一個稱爲stats的部分視圖。但是,我的索引視圖文件中無法識別該渲染函數。我GOOGLE了它,但似乎無法找到如何讓程序識別它。 – Slethron

+0

對不起,我正在盲目寫作,並打算使用'@ Html.Partial'。我的錯。 http://rachelappel.com/razor/partial-views-in-asp-net-mvc-3-w-the-razor-view-engine/ –

+0

謝謝,但現在它不承認這一行中的模型參數: return View(「_ Stats」,Model); – Slethron