填充转换为JSON的ViewModel

时间:2011-12-15 00:44:40

标签: json asp.net-mvc-3 jquery mvvm factory-pattern

我们即将破坏我们的控制器:返回半静态HTML页面的操作,返回JSON ViewModel的操作以及最后发布更改的操作。我们计划使用JSON.NET来执行JSON序列化,因为它支持类似LINQ的漂亮语法来创建复杂的JSON对象。我们将使用jQuery + AJAX来调用JSON操作并使用结果来替换HTML中的元素。

之前,我们将ViewModels传递给View()方法,并将其与Razor一起使用以填充屏幕。所以真正的重大区别是我们的视图模型将是JSON对象,JavaScript将构建页面。 Razor语法的问题在于它是一个拐杖。很多时候我们正在修改Razor和JavaScript(Frankenstein)。另外,一些页面需要足够长的时间来加载,无论如何都需要某种前期反馈(加载......)。

问题:我一直在查看我的代码,并注意到许多ViewModel共享公共属性。此外,相同的逻辑出现在多个控制器上。我一直想知道将这种逻辑放在一个地方的模式/工具是什么。另外,我是否应该尝试使用子ViewModel(与其他子ViewModels等)创建“主”ViewModel?这个想法是所有页面都共享一些元素(例如页眉和页脚内容),因此每个页面都有一个共同的ViewModel结构似乎是有意义的。这样我可以重用一些JavaScript来查找数据并在HTML中设置它。我想如果一个页面没有使用子ViewModel,我只会传递null,所以它不会占用太多空间。

我想确保在开始走这条新路之前把事情做好。我见过以前使用过ViewModel层次结构的应用程序,因为它已经看到了问题。我还希望保持AJAX调用的数量,所以我希望尽可能少地在尽可能少的调用中返回尽可能多的数据。它们是一种矛盾的要求。我希望有人有构建大量ViewModel的经验,并将这些转换为JSON对象以供客户端使用。我也很好奇是否有人发现任何JavaScript工具用于从ViewModels构建页面。我们现在正在研究backbone.js,但它似乎是面向表单而不是通用内容生成。

1 个答案:

答案 0 :(得分:1)

  

这个想法是所有页面都共享一些元素(例如页眉和页脚内容),因此每个页面都有一个共同的ViewModel结构似乎是有意义的。

如果您还没有,请考虑使用partial viewsmaster pages来完成此操作。两者都是非常有用和强大的工具。

  

如果有人发现任何用于构建ViewModel页面的JavaScript工具,我也很好奇。

使用MVVM模式的极其强大的JavaScript库是Knockout.js。主页上的二十分钟介绍视频解释清楚。