Question

J'ai un contrôleur MVC qui exécute un processus, définit des données de vue, puis renvoie les résultats de ces données à l'utilisateur dans une vue. Le temps de traitement dépend de la quantité de données en cours de traitement. J'ai besoin d'un bon moyen d'afficher un fichier .gif animé dans la vue pendant l'exécution du processus, ce qui permet à l'utilisateur de savoir que quelque chose se passe.

J'ai examiné diverses méthodes AJAX et vues partielles, mais je ne parviens toujours pas à trouver le meilleur moyen d'y parvenir. Ce que j’aurais vraiment voulu faire, c’était un filtre ActionFilter qui renverrait une vue ou une vue partielle pendant l’événement OnActionExecuting qui afficherait ce fichier .gif animé, puis une fois que le contrôleur aurait terminé le traitement et renverrait le ViewData, la vue ou la vue partielle avec la vue réelle. Les données pourraient être affichées.

Il semble également que jQuery serait en mesure de fournir une méthode asynchrone pour appeler l’action du contrôleur en arrière-plan, puis restituer la vue. Toute aide serait la bienvenue.

Était-ce utile?

La solution

Dans votre contrôleur:

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

Dans la vue (javascript, utilisation de 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()
    });
});

Notez que cela suppose une route où "id" vient après l'action. Le paramètre 'x' de l'action consiste à vaincre la mise en cache agressive dans IE.

Dans la vue (balise):

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

Obtenez des gifs de chargeur ici .

Notez également que vous n’avez pas à le faire avec Json. Si vous préférez, vous pouvez récupérer d'autres éléments, tels que HTML ou XML, à partir de l'action du contrôleur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top