web-dev-qa-db-fra.com

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);
    }
68
Marty Trenouth

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);
}
106
cacois

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);
    });
}
30
Manatherin

Url.Action ("Evil", modèle)

générera une chaîne de requête get, mais votre méthode ajax est post et enverra le statut d'erreur 500 (Internal Server Error) - Fereydoon Barikzehy le 14 février à 9h51 

Ajoutez simplement "JsonRequestBehavior.AllowGet" sur votre objet Json.

0
Ricardo Cardoso