2012-05-28 17 views
6

私はこの次のコードを持っている:MVCのpartialviewでjsonを返すにはどうすればよいですか?

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

をしかし、私は代わりにpartialview上でそれを使用したい、私はそれをどのように行うことができますか?あなたがHtml.RenderActionを使用して、このアクションを呼び出す場合化するJsonResultは全体の応答のコンテンツタイプを上書きしますので、私は正確に何が必要理解していれば

+1

JavaScriptコードで部分的に表示したいですか? –

答えて

2

すると、次の

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

を試みることはCのコンテンツタイプを設定することが重要です。それは良い解決策ではありませんが、場合によっては機能します。

代わりに、あなたはまた、よりよい解決策を試すことができます。

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

次にあなたが文字列表現であなたが望むすべてを行うことができます。それは実際にJsonResultが内部で行うことです。 Btw、同じ成功をあなたはここで任意のjsonシリアライザを使用することができます。

クライアントでアクセスする場合は、コードを変更する必要はありません。

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

あなたは、あなたのビューモデルにそれを渡したい場合は::jQueryのを使用する場合には

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

をあなたはまた、代わりにJSONの部分的なビューを返すことができます。

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