我需要从服务器向客户端提供一些Json,这有点麻烦,因为几乎所有教程都假设Ajax调用单独的动作来获取Json。
这让我觉得必须有一些理由为什么这样做。在Asp.Net MVC中,我们可以将模型与视图一起传递以获取信息,但我们似乎无法轻松传递Json对象。相反,您应该单独调用以获取此信息。
如果在生成页面时知道Json信息,为什么不同时生成它呢?
如果我不够清楚,我很抱歉。虽然很高兴听到将Json带到客户端的方法,但问题实际上是否有一个特定的原因,Ajax调用方法更受欢迎,如安全性或类似的东西。
答案 0 :(得分:1)
你能把这样的东西放到你的视野中吗? (粗略的伪代码,假设使用Razor视图)
< script >
var myJSON = { Field: @model.Field, Field2: @model.Field2 };
< /script >
答案 1 :(得分:1)
因为你不需要同时...在第一次调用时将获得html(数据视图 - 由视图模型表示),并且任何ajax调用都将获得可能的更新数据(json序列化视图模型)。
答案 2 :(得分:1)
没理由你不能。您可以使用javacript序列化程序创建一个放在页面上的JSON字符串。您还可以创建一个操作,返回从脚本标记调用的json字符串。
如果你正在使用KnockOut,你想要的是Mapping插件,它将普通的JS对象(如上面生成的那样)转换为可供KnockOut使用的可观察对象。从这里看信息。 http://knockoutjs.com/documentation/plugins-mapping.html
答案 3 :(得分:0)
您可以通过设置接受标头来使用content-negotiation。这被认为是最佳实践(根据一些RESTful)。
这也需要在服务器上得到支持和实现。 ASP NET MVC 不容易支持内容协商,你必须自己通过if-else或使用ActionFilter并实现动作选择器来实现它。