Si je comprends bien ce dont vous avez besoin, vous pouvez essayer ce qui suit
public JsonResult Index2(FormCollection fc)
{
var goalcardWithPlannedDate = repository.GetUserGoalCardWithPlannedDate();
return Json(goalcardWithPlannedDate.Select(x => new GoalCardViewModel(x)), "text/html", JsonRequestBehavior.AllowGet);
}
Il est important de définir le type de contenu parce que JsonResult remplacera le type de contenu de la réponse entière si vous appelez cette action en utilisant Html.RenderAction
. Ce n'est pas une bonne solution mais elle fonctionne dans certains cas.
Vous pouvez aussi essayer une meilleure solution :
var scriptSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();
var jsonString = scriptSerializer.Serialize(goalcardWithPlannedDate.Select(x => new GoalCardViewModel(x)));
Ensuite, vous pouvez faire tout ce que vous voulez avec une représentation en chaîne. C'est ce que JsonResult
faire à l'intérieur de celui-ci. En fait, avec le même succès, vous pouvez utiliser n'importe quel sérialiseur json ici.
Si vous voulez y accéder sur le client. Vous n'avez pas besoin de modifier votre code. Dans le cas de l'utilisation de jQuery :
$.post('<%= Url.Action("Index2") %>', { /* your data */ }, function(json) { /* actions with json */ }, 'json')
Si vous voulez le passer à votre modèle de vue alors :
[HttpPost]
public ActionResult Index2(FormCollection fc)
{
var goalcardWithPlannedDate = repository.GetUserGoalCardWithPlannedDate();
return PartialView(new MyModel { Data = goalcardWithPlannedDate.Select(x => new GoalCardViewModel(x)) });
}