asp.net-mvc – 如何填充/验证您的ViewModels?
我很好奇所有的人们建立他们的ViewModels的各种方式,为什么他们选择这种方法。
我可以在这里想到几种方法: -1。注入存储库 – 控制器加载模型并映射到ViewModel。这里的ViewModel构造函数可以采取各种集合inter为inter设置。在选择列表如: public CustomerController(ISomeRepository repository) { _repository = repository; } public ActionResult Create() { CustomerCreateViewModel model = new CustomerCreateViewModel(_repository.GetShipTypes,_repository.GetStates); .. .. } -2。 ViewModelBuilder – 在控制器中注入或实例化注入的存储库的实例。通过类似的东西调用 >var orderViewModel = orderViewModelBuilder.WithStates().Build(orderId); 要么, var orderViewModel = orderViewModelBuilder.WithStates().Build(orderId); -3。直接在控制器(没有代码需要 – 它的凌乱) -4。一些其他服务(注入或不注入)返回控制器映射的域模型,或者一个ViewModel(任何人执行此操作返回一个没有明确命名/注释为ViewModel构建器类的视图模型)。 public JobCreateViewModel BuildJobCreateViewModel(int parentId) { JobCreateViewModel model = new JobCreateViewModel(); model.JobStatus = _unitOfWork.JobRepository.GetJobStatuses(); model.States=_unitOfWork.StateRepository.GetAll(); return model; } 现在返回旅行 – 关于验证视图模型 – 是从标准验证的基本ViewModel类继承,还是在所有ViewModel之间复制验证(例如数据注释属性),或者仅仅依赖服务器端验证,都可以验证againt你的域对象? 任何其他?什么更好?为什么? 编辑 解决方法
我将一个服务注入控制器,而不是存储库,然后使用
AutoMapper将其转换为视图模型。在这种情况下,服务层的好处是它可以将来自一个或多个存储库的多个简单操作聚合到暴露域模型的单个操作中。例:
private readonly ICustomerService _service; public CustomerController(ICustomerService service) { _service = service; } [AutoMap(typeof(Customer),typeof(CustomerViewModel))] public ActionResult Create(int id) { Customer customer = _service.GetCustomer(id); return View(customer); } 在本示例中,AutoMap是一个自定义操作过滤器,我可以编写它在控制器操作后执行,检查返回的对象,并使用定义的AutoMapper映射将其映射到指定的目标类型。所以视图获得相应的CustomerViewModel作为模型类型。将等同于: public ActionResult Create(int id) { Customer customer = _service.GetCustomer(id); CustomerViewModel vm = Mapper.Map<Customer,CustomerViewModel>(customer); return View(vm); } 它只是它是太多的管道和重复的代码,可以集中。 我也建议你看Jimmy Bogard的putting your controllers on a diet video。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 将实体框架数据模型放在MVC应用程序中的位置
- .NET Core MVC RequestLocalization忽略DefaultRequestCult
- 如何在asp.net会员中手动更改密码?
- asp.net – 是否有可能告诉IIS 7并行处理请求队列?
- Asp.net MVC中Razor常见的问题与解决方法总结
- adfs2.0 – 启用了非声明的ASP.NET应用程序和ADFS v2.0
- asp.net-mvc-3 – _AppStart正在执行时无法创建存储范围
- razor – ASP.NET MVC 4 – for循环帖子模型集合属性,但for
- asp.net – 跟踪间歇性“对象引用未设置为对象的实例”.构建
- 绘制图表到ASP.NET MVC 4(Razor,C#)网站
- asp.net – 如何在MVC Razor中处理null子实体
- asp.net – 从虚拟机调试主机上的网站
- asp.net-mvc-2 – 使用routeValue从MVC URL中删除
- asp.net – 客户特定语言的定制文化?
- asp.net-web-api – 如何存储Web API访问令牌?
- asp.net-mvc – 在EF CF中添加/更新导航属性
- asp.net-web-api – 在Visual Studio中启动WebAP
- 每个页面上的ASP.NET MVC自定义用户字段
- asp.net – 在Global.asax方法中将与Autofac注册
- asp.net – 使用EF Projection的RIA Services Do