4

我正在编写一个 MVC 应用程序,并且我认为 Knockout.js 将帮助解决我的很多问题,除了在此过程中,它创建了一个我正在解决的问题的新问题。

我将所有 MVC 端点转换为仅返回视图,然后我创建了其他几个返回 JSON 对象的端点。当用户浏览网站时,网站会加载基本的 UI 框架。之后,Knockout.js 通过 AJAX 调用加载模型。这导致每个页面都加载,然后再次“加载”,就像 MVC 一样,页面加载并且所有数据都存在。

我一直在寻找同时加载两者的方法,但我还没有找到不需要我完全重构网站的任何东西。最好的选择是:

  • 将 JSON 端点合并到视图端点中,并使用代码隐藏将模型转换为 JSON@Html.Raw(Json.Encode(object))

但随后我必须摆脱我所有的纯 JSON 端点。

我还能做些什么来将 JSON 端点数据传递到服务器端的视图?或者有什么方法可以同时加载模型和视图?

4

2 回答 2

3

您的架构是正确的,但您希望初始加载使用模型中的数据预先填充您的视图。在只返回视图的控制器操作中,您应该将要填充的数据放入 ViewData。然后视图最初加载模型值,并且每个 UI 元素都可以有一个 AJAX 更新,该更新为该特定字段调用控制器操作。

这也是ViewModel 的理想情况。这也可能有所帮助

于 2012-04-21T20:21:02.677 回答
1

我也同意让您的初始视图生成将初始数据直接呈现到视图中是一个好主意。一般来说,这确实比单独的 AJAX 调用 + JavaScript 之后填充数据产生更好的性能。

但我也认为这真的取决于你正在加载的页面类型。如果您的应用程序主要基于 AJAX(SPA 样式模型),那么第一次加载可能并不那么重要,因为它只发生一次,并且可能需要花费一些额外的时间。通过 AJAX 或通过传统的视图操作以一种方式加载所有数据会更容易和更一致。当您的客户端代码要求您重新加载列表或记录的整个数据集时,您最终不会复制模板/视图逻辑来生成该输出。

于 2012-04-22T00:17:58.470 回答