3

我开始MVC和我了解这个职位的模型和的ViewModels,感谢的区别:区别?

http://rachelappel.com/use-viewmodels-to-manage-data-amp-organize-code-in-asp.net-mvc-applications

但是我发现这对我的同事和印象,这是一种替代下现在使用敲除来将视图绑定到模型。有人可以解释这个吗?敲除绑定是否与定义具有属性的ViewModel类一样?

谢谢!

+2

Knockout使用客户端视图模型; MVC使用服务器端视图模型。 – SLaks

+0

所以它是一个或另一个?你如何决定使用哪一个? – RobVious

回答

5

在约定可以使用淘汰赛视图-model作为客户端,MVC视图模型作为服务器端。

你的问题:你如何决定使用哪一种?

答:您可以同时使用作为parallel.That意味着您的单cshtml页面可以有一个淘汰赛视图模型是below.It同时包含属性和功能的unit.This视图模型的行为你需要什么样的客户端功能。

//This is a simple Viewmodel 
    //JavaScript that defines the data and behavior of your UI 
    function AppViewModel() { 
     var self = this; 
     self.firstName = ko.observable(); 
     self.lastName = ko.observable(); 

     self.fullName = ko.computed(function() { 
      return self.firstName() + " " + self.lastName(); 
     }); 

     self.capitalizeLastName = function() { 
      var currentVal = self.lastName();//Read the current value 
      self.lastName(currentVal.toUpperCase());//Write back a modified value 
     }; 
    } 

但作秀服务器端的行为,你可以使用更复杂(或多个属性)与MVC视图model.That是从数据库视图带来的数据并显示这些数据。

结论:因此,您可以在使用MVC时同时使用两个视图模型。

重要提示:但是,如果你需要使用单一的视图模型的两个场景,那么你可以做那件事also.For,你必须使用KnockoutJS Mapping plugin

它可用于像的下方。

<script src="~/Scripts/knockout.mapping-latest.js"></script> 
<script type="text/javascript"> 
     $(function() { 
      var viewModel = ko.mapping.fromJS(@Html.Raw(Model.ToJson())); 
      ko.applyBindings(viewModel); 
      }); 
</script> 

您可以从Loading KnockoutJS View Models from ASP.Net MVC, for faster page loads

如果您需要了解更多关于淘汰赛检查learn.knockoutjs

我希望这将有助于你得到更多这方面的细节。

3

淘汰赛视图模型是客户端和MVC是服务器端,这是很大的区别。

淘汰赛允许您创建单页的应用程序,并封装在客户端逻辑。

的ViewModels在MVC只能服务器端渲染网页和处理回发。

0

Xharze的答案是正确的,但是......

如果您需要查看相关的逻辑添加到不能做客户端,那么你需要有服务器端查看模型的业务实体。如果不是,它们会变得多余

还有经典的MVC的差异,这些服务器端模式将不会被用于渲染服务器端的内容,他们将被暴露在使用客户端KO引擎REST