【问题标题】:Why have a separate call to get Json?为什么要单独调用获取 Json?
【发布时间】:2011-12-26 02:37:58
【问题描述】:

我需要从服务器获取一些 Json 到客户端,这有点麻烦,因为几乎所有教程都假设 Ajax 调用一个单独的操作来获取 Json。

这使我认为这样做一定有某种原因。在 Asp.Net MVC 中,我们可以将模型与视图一起传递以获取信息,但我们似乎无法轻松传递 Json 对象。相反,您应该单独调用以获取此信息。

如果页面生成的时候Json信息就知道了,为什么不同时生成呢?


如果我不够清楚,我很抱歉。虽然很高兴听到将 Json 提供给客户端的方法,但问题实际上是 Ajax 调用方法更受欢迎是否有特定原因,例如安全性或类似的东西。

【问题讨论】:

    标签: asp.net ajax json asp.net-mvc-3


    【解决方案1】:

    你能把这样的东西放到你的视图中吗? (粗略的伪代码,假设使用 Razor 视图)

    < script >

    var myJSON = { 字段:@model.Field,Field2:@model.Field2 };

    脚本>

    【讨论】:

    • 我可以做到一点。拥有一个集合并且必须添加多个子对象,甚至将其插入到 Knockoutjs Observables 中,我发现对于 cshtml 页面来说代码太多了。另外,我的问题更多是关于为什么以一种方式而不是另一种方式来做。这似乎仍然是最简单的方法。
    【解决方案2】:

    因为您不需要同时使用两者...在第一次调用时将获取 html(数据视图 - 由视图模型表示),并且任何 ajax 调用都将获取可能的更新数据(json序列化视图模型)。

    【讨论】:

    • 我认为这仅在特定情况下您可能不想单独获取数据,但这里几乎在所有情况下都假设。
    【解决方案3】:

    没有理由你不能。您可以使用 javacript 序列化程序创建一个放在页面上的 JSON 字符串。您还可以创建一个操作来返回您从脚本标记调用的 json 字符串。

    如果您使用 KnockOut,您想要的是 Mapping 插件,它可以将普通的 JS 对象(如上面生成的对象)转换为可供 KnockOut 使用的可观察对象。从信息看这里。 http://knockoutjs.com/documentation/plugins-mapping.html

    【讨论】:

      【解决方案4】:

      您可以通过设置接受标头来使用content-negotiation。这被认为是最佳实践(并且根据一些 RESTful)。

      这也需要在服务器上得到支持和实现。 ASP NET MVC 并不容易支持内容协商,您必须自己通过 if-else 或使用 ActionFilter 并实现操作选择器来实现它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-15
        • 2018-12-19
        • 2012-02-01
        • 1970-01-01
        相关资源
        最近更新 更多