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 – 在使用Asp.Net MVC ActionLink,RedirectToA
- asp.net – 从SyndicationContent读取内容文本
- asp.net-mvc – MVC – 更改模型的视图中的值[封闭]
- 身份电子邮件与破折号在Asp.Net身份
- asp.net – 考虑Scalablity和友好URL的GUID替代方案
- 一个ASP.NET应用程序(意外)在多个应用程序域或频繁的应用程
- asp.net – 如何正确地大写希腊字在.NET?
- asp.net – 如何通过代码显示无
- asp.net-mvc – 通过programmming导入Ms Access数据
- asp.net-web-api – 无法识别Web Api [可查询]属性
- asp.net – jQuery的ajax正在导致FireFox的全页刷
- asp.net – 在iframe中显示PDF
- asp.net-mvc-3 – 依赖注入与多个类实现的接口
- asp.net-mvc – 如何使用EF Code First解释为枚举
- asp.net-core-mvc – Html.AntiForgeryToken()仍
- asp.net-mvc-3 – 如何使用下拉列表的数据注释?
- asp.net-mvc – MVC ajax json post到控制器动作
- ASP.NET linkbutton两次提高onBeforeUnload事件
- asp.net-mvc – 是否可以在MVC控制器中的一个操作
- asp.net-mvc – 如何通过URL获取RouteData?
