2008-11-13 2 views
13

프로세스를 통해 실행되는 MVC 컨트롤러가 있고 뷰 데이터를 설정 한 다음이 데이터의 결과를 뷰의 사용자에게 반환합니다. 처리 시간은 처리중인 데이터의 양에 따라 달라집니다. 프로세스가 실행되는 동안 뷰 내에 애니메이션 .gif를 표시하여 사용자에게 무언가가 진행되고 있음을 알리는 좋은 방법이 필요합니다.ASP.Net MVC로드 중 진행 표시기

다양한 AJAX 메소드와 부분 뷰를 살펴 보았지만 여전히이를 수행하는 좋은 방법을 찾을 수 없습니다. 실제로 할 수있는 일은 OnActionExecuting 이벤트 중에 View 또는 Partial View를 반환하는 ActionFilter입니다.이 애니메이션 된 .gif를 표시 한 다음 컨트롤러가 processsing을 완료하고 ViewData, 뷰 또는 부분 뷰를 실제 뷰와 함께 반환하면 데이터를 표시 할 수 있습니다.

또한 jQuery가 백그라운드에서 컨트롤러 작업을 호출하고보기를 렌더링하는 비동기 방식을 제공 할 수있을 것 같습니다. 어떤 도움을 주시면 감사하겠습니다. 컨트롤러에서

답변

24

: 뷰에서

public JsonResult GetSomething(int id) 
{ 
    return Json(service.GetSomething(id)); 
} 

(자바 스크립트, jQuery를 사용하여) :이 'ID가'행동 뒤에 오는 경로를 가정합니다

$('#someLink').click(function() 
{ 
    var action = '<%=Html.ResolveUrl("~/MyController.mvc/GetSomething/")%>' + $('#someId').val() + '?x=' + new Date().getTime(); 
    $('#loading').show() 
    $.getJSON(action, null, function(something) 
    { 
     do stuff with something 
     $('#loading').hide() 
    }); 
}); 

참고. 액션의 'x'매개 변수는 IE에서 공격적인 캐싱을 무력화하는 것입니다. 뷰 (마크 업)에서

:

<img id="loading" src="images/ajax-loader.gif" alt=""/> 
<!-- use a css stlye to make display:none --> 

가져 오기 로더는 here을 GIF를.

또한 Json에서는이 작업을 수행하지 않아도됩니다. 원한다면 컨트롤러 액션에서 HTML이나 XML과 같은 다른 것들을 가져올 수 있습니다.

+0

2 개의 JS 조각에 대해 $ ('# loading'). $ ('# loading') $ ('loading')을 선택하기 위해 'loading'에 #을 추가해야했습니다. .. 전반적으로, JS에 대한 감사 ... 그게 완벽했다 .. –