2013-04-17 64 views
4

它可以使用任務(System.Threading)裏面的剃刀?異步加載cshtml頁面內

我想要做的是這樣的:我有一張表,我想要異步填充。

看代碼:

@{ 
    Func<dynamic, object> preenche = 
     @<text> 
      <tr><td>oi1</td><td>oi2</td></tr> 
     </text>; 
} 

... 
<tbody> 
    @Task.Factory.StartNew(() => 
     { 
      foreach(Apontamento ap in Model.apontamentos) 
      { 
       preenche(ap); 
      } 
     }) 
</tbody> 

輸出僅此:System.Threading.Tasks.Task

這可能嗎?或者我可以擁有我想用Ajax做的事情?

回答

0

您不應該在視圖中執行此操作。進行異步操作,但是當你開始渲染視圖時,所有數據都應該準備好。

+1

這不是一個答案,我也可以想到在頁面加載後加載更多數據的UI場景是理想的,並且會創建一個更加快速的界面 – BigOmega

+0

目前還不清楚OP是否想要使用異步服務器處理或AJAX調用,所以完全有可能我正在回答另一個問題。但是我不明白你的評論的其餘部分與我的回答有何關係。我指出,如果你在服務器上進行異步處理,你可以在控制器中執行它,而不是在視圖中。 Web場景中的更多異步操作旨在減少服務器負載並提高可伸縮性,而不是創建更加快速的接口。 – Stilgar

5

如果您希望頁面呈現並立即出現,然後在稍後發生某些操作(例如,某個操作需要5秒鐘才能完成),那麼當數據可用時,您可以通過執行此類操作來更新頁面有關.getJSON的更多信息)。在控制器

<script type="text/javascript"> 
    $.getJSON('LongRunningAsyncTask', function (result) 
    { 
     // Populate table or other actions with: result.Data 
     // ... 
    }); 
</script> 

然後你會有這樣的任務:

在您Razor視圖你可以添加一些JavaScript

public JsonResult LongRunningAsyncTask() 
{ 
    // Show this is async and won't render straight away... 
    System.Threading.Thread.Sleep(5000); 

    // Build up our view model 
    var viewModel = new TestViewModel(); 

    // Send back as a Json result 
    var result = new JsonResult(); 
    result.Data = viewModel; 
    return Json(result, JsonRequestBehavior.AllowGet); 
}