2009-07-13 5 views
1

Je génère permet de dire un 1000 d'enregistrements à une base de données. Cela signifie que cela prend du temps. Maintenant, un utilisateur peut devenir impatient. Donc, je veux lui montrer une barre de progression pendant le processus de génération, ce qui se passe dans le contrôleur. J'ai trouvé des barres de progression assez jquery ou flash, mais je ne sais pas comment les utiliser, car après avoir envoyé une requête à une action, les premières données que je reçois pour créer une nouvelle page de vue (je sais) sont après l'action Controller se termine.Publier progressivement des données pour afficher asp.net mvc

Des idées pour afficher la barre de progression et comment lui envoyer des données pour qu'elle "charge"?

Merci d'avance.

Répondre

1

Je suis nouveau à asp mvc (et trop-plein stck). Mais mon approche serait de démarrer le processus de génération d'enregistrements dans un nouveau thread. Rediriger vers une vue qui charge une vue partielle avec la barre de progression. puis mettez à jour le partiel avec un script sur cette vue. smthing comme:

<div id="documents-partial"> 
    <% if (ViewData["IsDone"] == false) { %> 
    <% Html.RenderPartial("ProgressBar", ViewData["Progress"]); %> 
    <% }else{ %> 
    <% Html.RenderPartial("Records", ViewData["Records"]); %> 
    <% } 
</div> 

<script type="text/javascript"> 
    $(document).ready(function() { 
    update(); 
    } 
    function update(){ 
    $('div#id-of-where-you-want-to-load-partial-view').load('/Records/CheckForUpdate', {param1: <%= ViewData["Progress"].Id %>}, update /*on callback calls the update method again*/); 
</script> 
1

Peut-être que vous devriez faire appel de serveur comme demande ajax

0

Une façon que je voyais était sur le webinterface pour le TeamCity de buildserver.

Il montre la progression de votre build. La barre de progression est définie sur la durée de la dernière génération.

Cela ne fonctionne pas parfaitement mais assez bien pour être utile. Si le travail effectué est toujours comparable (comme la durée d'une construction), vous pouvez l'essayer de cette façon.

0

si vous utilisez ajax pour récupérer les enregistrements, vous pouvez utiliser,

// Progress Bar ----------------------------- 
$().ajaxSend(function(r, s) { 
    $("#contentLoading").show(); 
}); 

$().ajaxStop(function(r, s) { 
    $("#contentLoading").fadeOut("fast"); 
}); 
//------------------------------------------- 


<img id="contentLoading" src="../../Content/images/ajax-loader.gif" style="display:none" alt="Updating ..." /> 

Ce code afficher et masquer une barre de progression gif animé tandis qu'une demande de paiement ajax est en cours d'exécution.

Questions connexes