如何在 MVC 中的部分视图上返回 json
本文关键字:视图 返回 json MVC | 更新日期: 2023-09-27 18:35:34
我有以下代码:
[HttpPost]
public JsonResult Index2(FormCollection fc)
{
var goalcardWithPlannedDate = repository.GetUserGoalCardWithPlannedDate();
return Json(goalcardWithPlannedDate.Select(x => new GoalCardViewModel(x)));
}
但是我想在部分视图上使用它,我该怎么做?
如果我正确理解您的需求,您可以尝试以下操作
public JsonResult Index2(FormCollection fc)
{
var goalcardWithPlannedDate = repository.GetUserGoalCardWithPlannedDate();
return Json(goalcardWithPlannedDate.Select(x => new GoalCardViewModel(x)), "text/html", JsonRequestBehavior.AllowGet);
}
设置 c 内容类型很重要,因为如果使用 Html.RenderAction
调用此操作,JsonResult 将覆盖整个响应的内容类型。这不是一个好的解决方案,但在某些情况下有效。
相反,您也可以尝试更好的解决方案:
var scriptSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();
var jsonString = scriptSerializer.Serialize(goalcardWithPlannedDate.Select(x => new GoalCardViewModel(x)));
然后,您可以使用字符串表示形式执行所需的任何操作。这是JsonResult
在其中实际做的事情。顺便说一句,同样的成功,你可以在这里使用任何 json 序列化程序。
如果要在客户端上访问它。您无需更改代码。在使用jQuery的情况下:
$.post('<%= Url.Action("Index2") %>', { /* your data */ }, function(json) { /* actions with json */ }, 'json')
如果要将其传递给视图模型,则:
[HttpPost]
public ActionResult Index2(FormCollection fc)
{
var goalcardWithPlannedDate = repository.GetUserGoalCardWithPlannedDate();
return PartialView(new MyModel { Data = goalcardWithPlannedDate.Select(x => new GoalCardViewModel(x)) });
}
您还可以返回部分视图而不是 Json。
[HttpPost]
public ActionResult Index2(FormCollection fc)
{
var goalcardWithPlannedDate = repository.GetUserGoalCardWithPlannedDate();
return PartialView(goalcardWithPlannedDate.Select(x => new GoalCardViewModel(x)));
}