72 votes

MVC Renvoyer une vue partielle en JSON

Existe-t-il un moyen de renvoyer une chaîne HTML à partir du rendu partiel dans le cadre d'une réponse JSON de MVC?

     public ActionResult ReturnSpecialJsonIfInvalid(AwesomenessModel model)
    {
        if (ModelState.IsValid)
        {
            if(Request.IsAjaxRequest()
                return PartialView("NotEvil", model);
            return View(model)
        }
        if(Request.IsAjaxRequest())
        {
            return Json(new { error=true, message = PartialView("Evil",model)});
        }
        return View(model);
    }
 

113voto

cacois Points 893

Vous pouvez extraire la chaîne html de l'objet PartialViewResult, similaire à la réponse à cette discussion:

Rendre une vue sous forme de chaîne

PartialViewResult et ViewResult dérivent tous deux de ViewResultBase, la même méthode devrait donc fonctionner sur les deux.

En utilisant le code du fil de discussion ci-dessus, vous pourrez utiliser:

 public ActionResult ReturnSpecialJsonIfInvalid(AwesomenessModel model)
{
    if (ModelState.IsValid)
    {
        if(Request.IsAjaxRequest()
            return PartialView("NotEvil", model);
        return View(model)
    }
    if(Request.IsAjaxRequest())
    {
        return Json(new { error=true, message = RenderViewToString(PartialView("Evil",model)}));
    }
    return View(model);
}
 

34voto

Manatherin Points 2685

Au lieu de RenderViewToString je préfère une approche comme

 return Json(new { Url = Url.Action("Evil", model) });
 

alors vous pouvez attraper le résultat dans votre javascript et faire quelque chose comme

 success: function(data) {
    $.post(data.Url, function(partial) { 
        $('#IdOfDivToUpdate').html(partial);
    });
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X