web-dev-qa-db-fra.com

Alternative à Viewcomponent pour ajax refresh

J'ai un composant d'affichage qui contient une logique métier réutilisable incorporée dans diverses pages. Cela a bien fonctionné. Cependant, j'ai maintenant besoin de rafraîchir le composant d'affichage en utilisant ajax.

Existe-t-il un moyen d'y parvenir? D'après ce que j'ai lu, ce n'est pas possible, bien que cette information soit un peu dépassée. Si ce n'est pas possible, quelle est la meilleure alternative?

19
czuroski

Sur beta7, il est désormais possible de renvoyer un ViewComponent directement depuis un contrôleur. Vérifiez la section MVC/Razor de l'annonce

Le nouveau ViewComponentResult dans MVC facilite le retour du résultat d'un ViewComponent à partir d'une action. Cela vous permet d'exposer facilement la logique d'un ViewComponent en tant que point de terminaison autonome.

Vous pouvez donc avoir un composant de vue simple comme celui-ci:

[ViewComponent(Name = "MyViewComponent")]
public class MyViewComponent : ViewComponent
{
    public IViewComponentResult Invoke()
    {
        var time = DateTime.Now.ToString("h:mm:ss");
        return Content($"The current time is {time}");
    }
}

Créez une méthode dans un contrôleur comme:

public IActionResult MyViewComponent()
{
    return ViewComponent("MyViewComponent");
}

Et faites un meilleur travail que mon rafraîchissement ajax rapide et sale:

var container = $("#myComponentContainer");
var refreshComponent = function () {
    $.get("/Home/MyViewComponent", function (data) { container.html(data); });
};

$(function () { window.setInterval(refreshComponent, 1000); });

Bien sûr, avant la version beta7, vous pouvez créer une vue comme solution de contournement suggérée par @eedam ou utiliser l'approche décrite dans ces réponses

31
Daniel J.G.