我开始 MVC 并且我了解模型和 ViewModels 之间的区别,这要感谢这篇文章:
http://rachelappel.com/use-viewmodels-to-manage-data-amp-organize-code-in-asp.net-mvc-applications
然而,我向我的同事展示了这个,现在我的印象是,这是使用敲除将视图绑定到模型的替代方法。有人可以解释一下吗?淘汰绑定是否与定义具有属性的 ViewModel 类做同样的事情?
谢谢!
我开始 MVC 并且我了解模型和 ViewModels 之间的区别,这要感谢这篇文章:
http://rachelappel.com/use-viewmodels-to-manage-data-amp-organize-code-in-asp.net-mvc-applications
然而,我向我的同事展示了这个,现在我的印象是,这是使用敲除将视图绑定到模型的替代方法。有人可以解释一下吗?淘汰绑定是否与定义具有属性的 ViewModel 类做同样的事情?
谢谢!
按照惯例,您可以使用 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
};
}
但是对于显示服务器端行为,您可以使用 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>
您可以从从 ASP.Net MVC 加载 KnockoutJS 视图模型中获得更多详细信息,以加快页面加载速度
如果您需要了解更多关于 Knockout 的信息,请查看learn.knockoutjs
我希望这对你有帮助。
淘汰视图模型是客户端,MVC 是服务器端,这是最大的区别。
Knockout 允许您创建单页应用程序,并在客户端封装逻辑。
MVC 中的 ViewModels 仅在服务器端用于渲染页面和处理回发。
Xharze 的答案是有效的,但是......
如果您需要将视图相关逻辑添加到无法在客户端完成的业务实体中,那么您需要拥有服务器端视图模型。如果不是,它们就会变得多余。
和经典 MVC 还是有区别的,这些服务端模型不会用来渲染服务端内容,它们会暴露给使用 REST 的客户端 KO 引擎