【发布时间】:2012-02-24 04:25:48
【问题描述】:
所以,我一直在建立一个全新的网站来取代我们当前的经典 asp 网站。我建立了一个基础项目并添加了我将使用的所有不同技术。
忍者 自动映射器 分页列表 英孚 4.0
到目前为止,我有一个网站的工作原型。它从数据库中提取数据,并显示在我的页面上。我认为我没有正确遵循模式。因为我的控制器动作看起来很奇怪。我开始认为我需要更改我的注入以将我的服务注入我的视图模型?将服务插入 ViewModel 是否常见?
视图模型
public class ParcelDetailViewModel
{
public Property Property { get; set; }
public int CurrentYear { get; set; }
public IEnumerable<AltOwnership> AltOwnership { get; set; }
public Ownership Ownership { get; set; }
public TotalValues TotalValues { get; set; }
public SiteAddressViewModel SiteAddress { get; set; }
public Value CurrentValues { get; set; }
public Transfer LatestTransfer { get; set; }
public LegalDescription LegalDescription { get; set; }
}
控制器
public class PropertyController : Controller
{
ICamaService _service = null;
[Inject]
public PropertyController(ICamaService service)
{
_service = service;
}
//TODO: ADD ACTIONS
public ViewResult List(int? page, int? size = 100)
{
var result = _service.GetProperties(page,size);
IList<ParcelDetailViewModel> ViewModel;
ViewModel = new List<ParcelDetailViewModel>();
Mapper.Map<IEnumerable<Models.Property>, IEnumerable<ParcelDetailViewModel>>(result, ViewModel);
return View(ViewModel.ToPagedList(page ?? 1, size ?? 100));
}
public ViewResult Details(string id)
{
var property = _service.GetProperty(id);
var acct = property.AccountNumber;
var AltOwners = _service.GetAltOwners(id);
var LegalDescription = _service.GetLegalDescription(id);
var Legals = _service.GetLegals(id).FirstOrDefault();
var Ownership = _service.GetOwnership((decimal)property.OwnerLookup);
var Values = _service.GetValues(acct);
var TotalValues = _service.GetTotalValues(acct);
var Location = _service.GetLocation(property.LocationLookup);
ParcelDetailViewModel ViewModel = new ParcelDetailViewModel();
SiteAddressViewModel SitusAddress = new SiteAddressViewModel();
ViewModel.SiteAddress = SitusAddress;
Mapper.Map<Models.Property, ParcelDetailViewModel>(property, ViewModel);
Mapper.Map<IEnumerable<AltOwnership>, ParcelDetailViewModel>(AltOwners, ViewModel);
Mapper.Map<Ownership, ParcelDetailViewModel>(Ownership, ViewModel);
Mapper.Map<TotalValues, ParcelDetailViewModel>(TotalValues, ViewModel);
Mapper.Map(Location, SitusAddress);
Mapper.Map(property, SitusAddress);
return View(ViewModel);
}
【问题讨论】:
-
你使用的是什么模式? ViewModel 是 MVVM,Controler 是来自 MVC?所以你同时使用吗?
-
嗯。也许这是我的问题的一部分。我的模型与我的观点如此不同,我需要一些东西将两者拉近。我见过其他使用 viewModel 的 Web 应用程序。
-
这是一个使用控制器和 ViewModel 的示例。我认为。 nerddinnerbook.s3.amazonaws.com/Part6.htm
-
控制器和视图模型在一起并不罕见。服务器使用的是 MVC,但 M 实际上是一个 VM,因为在数据库或域层中还有另一个 M。
-
@Domenic 谢谢你的澄清。这是我的理解。
标签: c# asp.net-mvc-3 inversion-of-control design-patterns