【问题标题】:How can I return my MVC4 partial view as json and is it a good thing to do?如何将我的 MVC4 部分视图返回为 json,这是一件好事吗?
【发布时间】:2012-04-25 13:48:47
【问题描述】:

我正在尝试清理我的代码。我有一个网格屏幕,它会刷新以下内容:

    public ActionResult Details(string pk)
    {
        IEnumerable<ContentDetail> model = null;
        try
        {
            model = _content.Details(pk);
            if (model.Count() > 0)
            {
                return PartialView(getView(pk) + "Details", model);
            }
        }
        catch (Exception e)
        {
            log(e);
        }
        return Content("No records found");
    }

我的所有其余代码都使用 json,我想返回如下内容:

public JsonResult JsonDetails(string pk)

但是我应该如何处理 PartialView?我找不到有关如何执行此操作的任何信息。这样做有什么优点/缺点吗?我在想如果代码失败,那么我会返回新的 ASP MVC4 代码使用的类似以下内容:

return Json(new { errors = GetErrorsFromModelState() });

有人可以帮我解决这个问题吗?我正在寻找特别针对 MVC4 的任何建议。

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-4


    【解决方案1】:

    我之前使用过answer 中概述的方法,这对我来说很成功。

    我想不出在 JSON 中返回 HTML 有什么缺点,尽管负载可能比单独返回数据要大得多。

    另一种方法是将模型返回为 JSON,并使用模板库,例如Handlebars.js,在客户端生成标记。这是单页应用程序中的常用方法。

    您关于返回错误的想法很好。 GetErrorsFromModelState 仅在模型状态存在验证错误的情况下使用 - 在上面的示例中,您没有执行任何需要您使用此方法的验证。所以你可能想在你的 catch-block 中输出一些友好的信息,例如

    try
    {
        ...
    }
    catch (Exception e)
    {
        log(e);
        return Json(new { errors = "An error occurred, please try again later" });
    }
    

    【讨论】:

      【解决方案2】:

      我之前使用过this answer 的代码,对我来说效果很好,我没有尝试返回特定错误,但可以访问controller.ModelState 进行检查。

      【讨论】:

      • 谢谢。我想知道为什么 ASP 没有内置这个功能。这不是很多人想做的事情吗?
      猜你喜欢
      • 2012-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-28
      • 2018-03-20
      • 2014-04-03
      • 1970-01-01
      相关资源
      最近更新 更多