2013-04-17 2 views
4

면도기 내부에서 Task (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 호출 그래서 나는 완전히 다른 질문에 대답하는 가능성이 있습니다. 그러나 나머지 의견이 내 대답과 어떤 관련이 있는지는 알 수 없습니다. 나는 당신이 서버에서 비동기 처리를하는 경우 뷰에없는 컨트롤러에서 수행한다는 것을 지적하고있다. 웹 시나리오에서 더 많은 비동기 작업은 서버로드를 줄이고 확장 성을 높이고보다 효율적인 인터페이스를 만들지 않으려 고합니다. – Stilgar

5

페이지를 렌더링하고 즉시 표시 한 다음 나중에 작업을 수행하려는 경우 (작업을 완료하는 데 5 초가 소요됨) 다음과 같은 방법으로 데이터를 사용할 수있을 때 페이지를 업데이트 할 수 있습니다 .getJSON에 대한 자세한 정보) 당신의 면도기보기

당신은 몇 가지 자바 스크립트를 추가 할 수 있습니다 : 다음

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

당신의 컨트롤러에이 같은 작업을 할 것이다 :

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); 
}