문제

프로세스를 실행하고 일부보기 데이터를 설정 한 다음이 데이터의 결과를보기에서 사용자에게 반환하는 MVC 컨트롤러가 있습니다. 프로세스 시간은 처리중인 데이터의 양에 따라 다릅니다. 프로세스가 실행중인 동안 뷰 내에 애니메이션 .gif를 표시하는 좋은 방법이 필요하며, 사용자에게 무슨 일이 일어나고 있음을 알 수 있습니다.

나는 다양한 Ajax 방법과 부분적 견해를 보았지만 여전히이를 달성하는 좋은 방법을 찾을 수는 없습니다. 내가 할 수 있었던 것은이 애니메이션 .gif를 표시하는 OnactionExecuting 이벤트에서보기 또는 부분보기를 반환하는 ActionFilter가있는 것이었고, 컨트롤러가 프로세스를 완료하고 실제보기로보기 또는 부분보기를 반환하면 데이터가 표시 될 수 있습니다.

또한 jQuery가 컨트롤러 동작을 백그라운드에서 호출 한 다음보기를 렌더링하는 멋진 비동기 방법을 제공 할 수있는 것 같습니다. 모든 도움이 감사하겠습니다.

도움이 되었습니까?

해결책

컨트롤러에서 :

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

보기 (JavaScript, jQuery 사용)에서 :

$('#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()
    });
});

이것은 행동 후 'ID'가 오는 경로를 가정합니다. 행동의 'X'매개 변수는 IE에서 공격적인 캐싱을 물리 치는 것입니다.

보기 (마크 업)에서 :

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

로더 gif를 얻으십시오 여기.

또한 JSON과 함께 할 필요는 없습니다. 원하는 경우 컨트롤러 작업에서 HTML 또는 XML과 같은 다른 것들을 가져올 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top