【发布时间】:2010-10-02 16:46:18
【问题描述】:
因此,我的视图与视图模型的比例几乎为 1:1,而且事情似乎进展顺利。如果我正确理解他们的目的,似乎视图模型应该
- “精简”实体模型,以便仅将相关属性传递给表示层
- 添加演示所需的其他信息,例如创建地址时的州缩写或联系人类型列表。
为了遵守这些原则,我的 Reports 控制器有点碰壁。为客户生成的各种报告需要访问大约 30 个不同的属性。因此,我的视图模型最终看起来与我的实体模型非常相似。
当然,最简单的解决方案是将实体模型传递给视图,这样我就可以访问所有属性,但是我还需要能够为空白或“不完整”的客户生成报告。这会导致在尝试访问我的实体模型上的导航属性时出现引用异常。
所以我可以对视图中的几乎每个字段使用空值检查,这似乎不太吸引人……或者我可以实现一个视图模型来避免空值引用异常。问题是我最终会得到一个看起来像这样的视图模型:
var customer = customersRepository.GetCustomer(id);
var viewModel = new CustomersViewModel()
{
FirstName = customer.FirstName,
LastName = customer.LastName,
Address = customer.MailingAddress.Address,
City = customer.MailingAddress.City,
// and on and on for about 30 different properties
};
return View(viewModel);
输入所有这些属性是感觉不对的事情之一。我是否错过了解决此问题的更优雅的解决方案?
【问题讨论】:
标签: c# asp.net-mvc viewmodel