6 votes

Comment puis-je renvoyer du json sur une vue partielle en MVC ?

J'ai le code suivant :

[HttpPost]
public JsonResult Index2(FormCollection fc)
{
    var goalcardWithPlannedDate = repository.GetUserGoalCardWithPlannedDate();
    return Json(goalcardWithPlannedDate.Select(x => new GoalCardViewModel(x)));
}

Mais je veux l'utiliser sur une vue partielle à la place, comment puis-je le faire ?

2voto

ILya Points 695

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

0voto

Asif Mushtaq Points 7943

Vous pouvez également renvoyer une vue partielle au lieu de Json.

[HttpPost]
public ActionResult Index2(FormCollection fc)
{
   var goalcardWithPlannedDate = repository.GetUserGoalCardWithPlannedDate();
   return PartialView(goalcardWithPlannedDate.Select(x => new GoalCardViewModel(x)));
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X