淘汰赛和.NET View模型之间的区别?

Rob*_*ous 3 model-view-controller asp.net-mvc viewmodel asp.net-mvc-3 knockout.js

我正在启动MVC,我理解模型和ViewModels之间的区别,感谢这篇文章:

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

然而,我向同事展示了这一点,现在我觉得这是使用knockout将视图绑定到模型的替代方法.有人可以解释一下吗?敲除绑定是否与定义具有属性的ViewModel类相同?

谢谢!

Sam*_*ath 5

在约定中,您可以使用Knockout视图模型作为客户端,MVC视图模型作为服务器端.

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

答:你可以同时使用两者.这意味着你的单个cshtml页面可以有一个挖空视图 - 模型如下所示.它包含属性和功能作为一个单元.这个视图模型的行为你需要的客户端功能.

    //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
        };
    }
Run Code Online (Sandbox Code Playgroud)

但是对于show server side behavior,您可以使用更复杂(或更多属性)的MVC视图模型.这是为了从数据库中获取数据并在视图中显示这些数据.

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

重要说明:但是如果你需要在两个场景中使用单一视图模型,那么你也可以做那件事.为此你必须使用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> 
Run Code Online (Sandbox Code Playgroud)

您可以从ASP.Net MVC加载KnockoutJS View Models获取更多有关此内容的详细信息,以加快页面加载速度

如果您需要了解更多关于Knockout的信息,请查看learn.knockoutjs

我希望这会对你有所帮助.