Renvoi d’une vue dans un object JSON

J’ai une application qui ne charge qu’une seule fois la vue complète. Ma raison pour cela n’est pas importante. Ce qui est important, c’est que le rest du contenu ne reviendra jamais que dans des vues partielles. En plus de certains contenus, j’ai quelques objects JSON que je voudrais faire passer à chaque serveur AJAX.

Existe-t-il un moyen de renvoyer un object JSON avec une vue parmi ses propriétés? Cela serait extrêmement utile et permettrait d’économiser de la bande passante, car la solution actuelle consiste à effectuer deux appels ajax, un pour le JSON et un pour la vue partielle, ce qui prend non seulement plus de temps et plus de bande passante, quelques astuces de fantaisie sur le serveur. Sérialiser une vue dans un object JSON résoudrait tous mes problèmes.

Quel est le meilleur moyen d’y parvenir et quels sont les inconvénients (le cas échéant)?

Vous pouvez rendre la vue à partir du contrôleur et la renvoyer au client avec l’object JSON.

Si vous utilisez mon simple assistant pour rendre ActionResult en chaîne, votre code ressemblera à ceci :

public JsonResult DoSomething() { var viewSsortingng = View().Capture(ControllerContext); return new JsonResult { JsonRequestBehavior = JsonRequestBehavior.AllowGet, Data = new { time = DateTime.Now, html = viewSsortingng } }; } 

Voici un morceau de code intéressant qui semble faire ce que je veux et préserve la liaison de modèle de ce que je peux dire.

 protected ssortingng RenderPartialViewToSsortingng(ssortingng viewName, object model) { controller.ViewData.Model = model; using (SsortingngWriter sw = new SsortingngWriter()) { ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName); ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw); viewResult.View.Render(viewContext, sw); return sw.GetSsortingngBuilder().ToSsortingng(); } } 

Fonctionne comme un charme. J’utilise simplement ceci et passe la chaîne en tant que paramètre JSON, puis sur le client, je lis le paramètre et le dépose dans le conteneur approprié. Je suis très excité d’avoir cela fonctionne.