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);
}
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);
}
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);
});
}
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.