我有一个.NET MVC 4项目,并且刚刚启动Kendo UI MVVM框架。MVC使用ViewModels将数据从控制器发送到视图。我通过MVVM框架管理所有客户端对象,并使用JSON序列化它们并将它们发送回我的控制器。
当前,我使用MVC ViewModel返回页面上将是静态的数据,并使用jquery调用来获取页面上所需的任何动态数据。我发现使用2种方法检索数据令人困惑。(如果我感到困惑,请想象下一个必须在我的代码中工作的开发人员)
当我可以轻松地拥有一种结构,在该结构中我可以根据需要在JavaScript代码中查询控制器(通过Web API)并将其直接保存到我的MVVM视图模型中时,我发现通过ViewModels将数据发送到View有点用处。
我看到在UI中使用MVVM框架有很多优点,它使控件绑定变得更加容易。
我的问题:
从控制器获取数据到MVVM ViewModel的最佳方法是什么?
我觉得使用MVC ViewModel会重复工作,因为我可以通过Ajax请求查询Web API,而不是将MVC ViewModel转换为MVVM JS ViewModel。
永远不要将MVC viewModel返回到我的UI并始终使用客户端Web API调用来检索所有数据,这是一个好方法吗?
谢谢,
尼古拉斯
永远不要将MVC viewModel返回到我的UI并始终使用客户端Web API调用来检索所有数据,这是一个好方法吗?
我会说这取决于您的用例。
您肯定可以返回在MVC模型中显示页面后需要呈现的数据。请记住,MVC模型已呈现到服务器上生成的HTML页面中。这意味着可以将值直接注入HTML中,然后再返回给客户端。
另外请记住,如果必须多次击中服务器,则可能需要更长的时间才能完全呈现页面。一次获取HTML,然后为每个Kendo小部件获取一次异步数据。
就是说,我通常会按照您所说的去做...只渲染没有模型的MVC视图,然后让Kendo UI小部件在页面加载后获取其数据。
但实际上,这取决于您的数据。如果您的MVC模型包含:
public string Title { get; set; }
在剃刀中,您有:
<h1>@Title</h1>
然后,我并不是真的想重新获取异步数据。在这种情况下,我通常会做一些骇人听闻的事情,然后将值放入页面中:
<script type="text/javascript">
window.viewData = window.viewData || {};
window.viewData.Title = "@Title"
</script>
<h1 data-bind="text: Title"></h1>
<script src="viewmodel.js"></script>
然后在viewmodel.js文件中(我从返回的HTML中创建了一个单独的文件,以便浏览器可以对其进行缓存)
(function (viewData) {
var viewModel = kendo.observable({
Title: viewData.Title
});
kendo.bind($("body"), viewModel);
})(window.viewData);
不过,这只是我自己的方法。不一定适合所有情况。这完全取决于您要从何处以及从何处获取什么数据。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句