【问题标题】:Why Using JSON in MVC application?为什么在 MVC 应用程序中使用 JSON?
【发布时间】:2014-03-25 20:43:35
【问题描述】:

首先,如果这是一个愚蠢的问题,我想道歉。 在学习 MVC 时,我创建了一个基于模型的强类型视图,例如将通过 2 个不同的函数显示所有用户,首先将返回一个传递用户集合的视图,第二个将返回 JSON 对象的集合。所以我的问题是,由于我不熟悉 JSON,而且对我来说使用模型更清楚,为什么然后在 MVC 中使用 JSON?

简而言之为什么使用:

var users = _db.Users
           .Where(r => r.Name.Contains(q))
           .Take(10)
           .Select(r => new { r.Name,r.LastName,r.Address.Country });
        return Json(users, JsonRequestBehavior.AllowGet);

代替:

 var users= _db.Users
           .Where(r => r.Name.Contains(q))
           .Take(10);
            return View(users);

也许这是一个糟糕的代码示例,但是如果我们可以直接传递模型,为什么还要在将模型传递给视图之前将它们转换为 Jason。

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-4 json.net


    【解决方案1】:

    对于第一个代码sn-p,它更有可能用于ajax调用以将数据从服务器无缝加载到客户端,并且可能会在不重新加载页面的情况下保持刷新。此外,Users 实体的信息可能比客户端所需的多得多,因此第一个示例是减少所提供的信息,并且不需要您创建新模型来表示它。

    第二个例子是一个控制器动作实际上返回一个视图并且该视图是强类型的。

    如果您要创建一个使用 WebApi 的项目,您将不会返回视图,您会期望客户端请求数据并且客户端会以它认为合适的方式呈现它。

    【讨论】:

      【解决方案2】:

      如果您希望调用返回可在浏览器中呈现的 HTML,您将返回一个 View,它基本上获取数据并将其应用于 HTML 模板。

      如果您希望调用仅返回数据(很可能由 AJAX 请求处理),那么您将返回 JSON。

      【讨论】:

        【解决方案3】:

        第一个将返回内容类型为 application/json 的 JSON,而后者将返回内容类型为 text/html 的 html(在适当的视图渲染引擎渲染了相关视图之后) - 可以考虑同一资源的两种不同表示。您可能希望返回 JSON 以响应通过 AJAX 发出的请求并仅返回模型中所需的数据,但您可能希望返回 HTML 以响应“正常”请求。

        开箱即用,ASP.NET MVC 不支持内容协商,也就是说,将 Accept 标头设置为特定 MIME 类型的请求可能不会产生具有预期内容类型的响应 - 控制器操作在大多数情况下,将被配置为以一种特定的内容类型(通常是 html)返回资源。另一方面,ASP.NET Web Api 确实支持开箱即用的内容协商。

        【讨论】:

          【解决方案4】:

          JSON(= 仅数据)通常用于异步 (AJAX) 请求,因为它们可以很容易地被 Javascript 处理,而视图是样式化的 HTML 响应,可以由浏览器显示。

          【讨论】:

            【解决方案5】:

            客户端库对 JSON 的理解非常好,因此如果您想解析结果并使用客户端框架/自定义脚本来操作它们,那么 JSON 是一个更好的选择(AngularJs 就是一个例子)。

            【讨论】:

              【解决方案6】:

              除了您的问题之外,在使用 JSON 时,首先您将模型转换为 JSON,但是当您用户发布请求时,您可能会将 JSON 重新转换为模型,以便将结果保存到数据库。 :-) 我

              【讨论】:

                猜你喜欢
                • 2014-05-11
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2015-01-16
                • 2014-03-28
                • 2017-12-25
                • 2014-08-01
                相关资源
                最近更新 更多