MVC Retorno Vista parcial como JSON

¿Hay alguna manera de devolver una cadena HTML para que no represente un parcial como parte de una respuesta 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); } 

Puede extraer la cadena html del objeto PartialViewResult, similar a la respuesta a este hilo:

Renderiza una vista como una cadena

PartialViewResult y ViewResult se derivan de ViewResultBase, por lo que el mismo método debería funcionar en ambos.

Usando el código del hilo anterior, podrás usar:

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

En lugar de RenderViewToString prefiero un enfoque como

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

entonces puedes ver el resultado en tu javascript y hacer algo como

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