2012-05-28 5 views
6

Ich habe diesen Code ein:Wie kann ich JSON auf eine Teilansicht in MVC zurückgeben?

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

Aber ich will es auf einem partialview verwenden, anstatt, wie kann ich das tun?

+1

möchten Sie es aus einer Teilansicht über Javascript-Code aufrufen? –

Antwort

2

Wenn ich richtig verstehe, was Sie brauchen, können Sie die folgende

public JsonResult Index2(FormCollection fc) 
{ 
    var goalcardWithPlannedDate = repository.GetUserGoalCardWithPlannedDate(); 
    return Json(goalcardWithPlannedDate.Select(x => new GoalCardViewModel(x)), "text/html", JsonRequestBehavior.AllowGet); 
} 

versuchen Es ist wichtig, c Inhaltstyp festgelegt, da JsonResult Inhaltstyp gesamte Antwort außer Kraft gesetzt wird, wenn Sie diese Aktion Html.RenderAction mit nennen. Es ist keine gute Lösung, aber es funktioniert in einigen Fällen.

Stattdessen können Sie auch eine bessere Lösung versuchen:

var scriptSerializer = new System.Web.Script.Serialization.JavaScriptSerializer(); 
var jsonString = scriptSerializer.Serialize(goalcardWithPlannedDate.Select(x => new GoalCardViewModel(x))); 

Dann können Sie alles, was Sie mit einem String-Darstellung wollen tun. Es ist, was eigentlich JsonResult innerhalb davon tun. BTW, mit dem gleichen Erfolg können Sie hier einen JSON-Serializer verwenden.

Wenn Sie auf Client zugreifen möchten. Sie müssen Ihren Code nicht ändern. Im Falle der Verwendung von jQuery:

$.post('<%= Url.Action("Index2") %>', { /* your data */ }, function(json) { /* actions with json */ }, 'json') 

Wenn Sie es Modell zu Ihrer Ansicht dann weitergeben müssen:

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

Sie auch eine Teilansicht zurückzukehren Statt Json.

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