【问题标题】:How can I return json on a partialview in MVC?如何在 MVC 的局部视图上返回 json?
【发布时间】:2012-05-28 09:23:06
【问题描述】:

我有以下代码:

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

但我想在部分视图上使用它,我该怎么做?

【问题讨论】:

  • 你想通过javascript代码从局部视图中调用它吗?

标签: c# asp.net-mvc json asp.net-mvc-3 jsonresult


【解决方案1】:

如果我正确理解您的需求,您可以尝试以下方法

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

【讨论】:

    【解决方案2】:

    您还可以返回部分视图而不是 Json。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-22
      • 1970-01-01
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-18
      • 1970-01-01
      相关资源
      最近更新 更多