2008-11-13 7 views
13

Tôi có Bộ điều khiển MVC chạy qua một quy trình, đặt một số Dữ liệu chế độ xem và sau đó trả về kết quả của dữ liệu này cho người dùng trong Chế độ xem. Thời gian xử lý phụ thuộc vào lượng dữ liệu đang được xử lý. Tôi cần một cách tốt để hiển thị một .gif hoạt hình trong View trong khi quá trình đang chạy, cho phép người dùng biết rằng có điều gì đó đang diễn ra.Chỉ số tải lên chỉ số ASP.Net MVC

Tôi đã xem xét các phương pháp AJAX khác nhau và xem một phần nhưng vẫn không thể tìm được cách tốt để thực hiện việc này. Những gì tôi thực sự muốn tôi có thể làm là có một ActionFilter có thể trả về View hoặc Partial View trong sự kiện OnActionExecuting hiển thị .gif hoạt hình này, sau đó một khi Controller hoàn thành processsing và trả về ViewData, view hoặc view một phần với View thực tế Dữ liệu có thể được hiển thị. Nó cũng có vẻ như jQuery sẽ có thể cung cấp một cách không đồng bộ tốt đẹp để gọi hành động điều khiển trong nền và sau đó kết xuất View. Bất kỳ trợ giúp sẽ được đánh giá cao.

Trả lời

24

Trong điều khiển của bạn:

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

Trong giao diện (javascript, sử dụng 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() 
    }); 
}); 

Lưu ý rằng điều này giả định một con đường nơi 'id' đưa ra sau khi hành động. Tham số 'x' trên hành động này là đánh bại bộ nhớ đệm tích cực trong IE.

Trong giao diện (đánh dấu):

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

Nhận nạp GIF here.

Cũng lưu ý rằng bạn không phải làm điều này với Json. Bạn có thể tìm nạp những thứ khác như HTML hoặc XML từ hành động của bộ điều khiển nếu bạn muốn.

+0

tôi đã phải thêm một # vào 'tải' để nó được chọn thành $ ('# loading'). Show() và $ ('# loading'). Hide() cho hai phần JS. .. tổng thể, cảm ơn JS ... đó là hoàn hảo .. –