【发布时间】:2013-08-04 11:29:42
【问题描述】:
我有一个 asp.net-mvc 站点,它几乎是一个 CRUD 应用程序,但我也在 web 视图之外进行了一些添加和更新(从电子表格上传等)。 Based on this article,我正在尝试将 MVC 项目之外的尽可能多的逻辑放入一个单独的共享项目中,以便我可以在所有场景中重用相同的代码,并且我正在尝试隔离和分离绑定到的“读取”视图模型用于从“编辑”视图模型中显示的 UI,这些视图模型表示在表单发布中发布到服务器的内容。
我在解决方案中有许多项目(域对象、importexport 等)与其他解决方案共享,而且 MVC 项目在 MVC 项目中有以下目录
- 控制器
- 观看次数
- 视图模型
- 脚本
- 编辑视图模型
我的 ViewModels 文件夹代表我绑定到我的视图的对象(一个容器对象,通常包括:
- 域对象和
- 一堆 IEnumerable 的 SelectListItem 来填充 UI 下拉列表等
类似这样的:
public class OrderViewModel
{
public Order MyOrder {get;set;}
public IEnumerable<SelectListItem> OrderTypes {get;set;}
public IEnumerable<SelectListItem> Sizes {get;set;}
}
我的 EditViewModels 文件夹代表我从表单发布到服务器的对象,因此它们通常是更简单的平面对象,只有基元,然后我在添加或更新我的数据库之前填充域对象:
public class OrderEditViewModel
{
public int Id {get;set;}
public int OrderTypeId {get;set;}
public int SizeId {get;set;}
}
我的主要问题是当我的 Controller 类中有一个通常看起来像这样(简化)的方法时:
public ActionResult Update(OrderEditViewModel order)
{
var existingOrder = _repository.GetOrder(order.Id);
existingOrder.Name = order.Name;
existingOrder.Size = _repository.GetSize(order.SizeId);
existingOrder.Price = order.Price;
_repository.Save(existingOrder);
return Json( Result = "Success");
}
我试图弄清楚如何在 MVC 项目之外获取尽可能多的代码,但这迫使我将 EditViewModel 中的所有类移到 MVC 项目之外,以便可以重用这些对象。
有没有人认为将这些“Post”数据结构归类在 MVC 项目之外有什么问题。鉴于它是一个“视图模型”类,将其从视图中移开感觉不对,但我看不到任何其他方式可以在 MVC 项目之外共享此代码。也许这里的“viewModel”名称可能是错误的?
【问题讨论】:
标签: asp.net-mvc viewmodel