如何将我的MVC4局部视图作为json返回,这是一件好事吗?

时间:2012-04-25 13:48:48

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

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

    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的任何建议。

2 个答案:

答案 0 :(得分:6)

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

我无法想到在JSON中返回HTML的任何缺点,尽管有效负载可能比单独返回数据时要大得多。

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

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

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

答案 1 :(得分:1)

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