2008-11-13 16 views
13

Bir işlem boyunca çalışan, bazı Görünüm Verileri ayarlayan ve daha sonra bu verilerin sonuçlarını bir Görünüm'de kullanıcıya döndüren bir MVC Denetleyiciye sahibim. İşlem süresi, işlenmekte olan veri miktarına bağlıdır. İşlem devam ederken Görünüm içinde bir animasyonlu .gif görüntülemenin iyi bir yoluna ihtiyacım var, kullanıcının bir şeylerin olup bittiğini bilmesine izin vermek.ASP.Net MVC Devam Ediyor İlerleme Göstergesi

Çeşitli AJAX yöntemlerine ve kısmi görünümlerine baktım ama yine de bunu başarmanın iyi bir yolunu bulamıyorum. Gerçekten bunu yapmak istediğim şey, bu animasyonlu .gif dosyasını görüntüleyen OnActionExecuting olayı sırasında Görünüm veya Kısmi Görünüm döndürecek bir ActionFilter'ına sahipti, ardından Denetleyici işlemi tamamladıktan ve ViewData'yı döndürdüğünde, görünüm veya kısmi görünümü Gerçek Görünümle Veri görüntülenebilir.

Ayrıca jQuery, arka planda denetleyici eylemini çağırmak ve daha sonra Görünümü oluşturmak için güzel bir eşzamansız bir yol sağlayabiliyor gibi görünüyor. Herhangi bir yardım takdir edilecektir. Kumandanızda olarak

cevap

24

: görünümünde

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

(javascript, JQuery kullanarak): Bu 'id' eylem sonra gelen bir rota varsayar

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

Not. Eylemdeki 'x' parametresi IE'de agresif önbelleğe almayı devre dışı bırakmaktır. görünüşüdür (belirteç) 'de

:

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

al yükleyici here GIF.

Ayrıca, bunu Json ile yapmanız gerekmediğini unutmayın. Tercih ederseniz, HTML veya XML gibi diğer şeyleri denetleyici eyleminden alabilirsiniz.

+0

JS İki yükleme için loading yüklemeye 'eklemem gerekiyordu, bu yüzden iki JS parçası için $ (' # loading ') show() ve $ (' # loading '). .. genel olarak, JS için teşekkürler ... Bu mükemmeldi .. –