Si i correctamente entiendo lo que necesita, puede intentar lo siguiente
public JsonResult Index2(FormCollection fc)
{
var goalcardWithPlannedDate = repository.GetUserGoalCardWithPlannedDate();
return Json(goalcardWithPlannedDate.Select(x => new GoalCardViewModel(x)), "text/html", JsonRequestBehavior.AllowGet);
}
Es importante establecer c tipo de contenido, ya JsonResult anulará tipo de contenido de la respuesta entera si se llama a esta acción utilizando Html.RenderAction
. No es una buena solución pero funciona en algunos casos.
lugar también se puede tratar mejor solución:
var scriptSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();
var jsonString = scriptSerializer.Serialize(goalcardWithPlannedDate.Select(x => new GoalCardViewModel(x)));
entonces usted puede hacer todo lo que quiera con una representación de cadena. Es lo que realmente hace JsonResult
dentro de él. Por cierto, con el mismo éxito puede usar cualquier serializador json aquí.
Si desea acceder a él en el cliente. No necesita cambiar su código. En caso de usar jQuery:
$.post('<%= Url.Action("Index2") %>', { /* your data */ }, function(json) { /* actions with json */ }, 'json')
Si se desea pasar a su modelo de vista a continuación:
[HttpPost]
public ActionResult Index2(FormCollection fc)
{
var goalcardWithPlannedDate = repository.GetUserGoalCardWithPlannedDate();
return PartialView(new MyModel { Data = goalcardWithPlannedDate.Select(x => new GoalCardViewModel(x)) });
}
¿Quieres llamarlo desde una vista parcial a través del código javascript? –