SO上的人经常说:“ViewModel
包含可以由视图执行的方法,属性以指示如何切换视图元素等......”
当我的ViewModel
作为WebApi响应发送到序列化为JSON
的客户端时,这个ViewModel
如何在客户端上执行方法?
这对我来说根本不清楚。
答案 0 :(得分:0)
您至少可以通过两种方式了解viewmodel
不是将业务对象传递给视图(例如MVC Razor视图),而是传递包含此视图所需属性的精简对象,而不是其他任何内容。视图设计器使用从数据库延迟加载的字段(避免Select N+1 problem和其他)
您可以创建将在客户端(在Javascript中)使用的viewmodel。您可以在Javascript中将其创建为对象,因此它可以包含视图可以调用的方法。您所描述的内容(使用WebAPI发送JSON对象)只是提供该视图模型的数据。 例如,您可以在此处查看主页knockoutjs。您可以看到包含票证数组的TicketsViewModel。在此示例中,您可以在viewmodel中看到三种硬编码的票证。但你可以像你描述的那样从WebAPI中获取它们作为JSON。下载后,只需将它们放入此阵列即可。
答案 1 :(得分:-1)
DTO(数据传输对象)包含可消耗格式的数据。 ViewModel / ActionModel包含为要使用的View格式化的数据。
DTO可能如下:
public class OrderDTO
{
public decimal Price { get; set; }
public int Amount { get; set; }
}
ViewModel可能如下所示:
public class OrderViewModel
{
public decimal Price { get; set; }
public int Amount { get; set; }
public string PriceBackgroundColor { get; set;}
public Uri ImageUri { get; set; }
}