2012-05-28 31 views
6

tengo este código siguiente:¿Cómo puedo devolver json en una vista parcial en MVC?

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

Pero quiero utilizarlo en un PartialView lugar, ¿cómo puedo hacer eso?

+1

¿Quieres llamarlo desde una vista parcial a través del código javascript? –

Respuesta

2

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

También puede devolver una vista parcial en lugar de JSON.

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