using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace MvcApplication1.Models { /// <summary> /// 表现层实体集合 /// </summary> public class UserCompanyViewModels { public UserViewModel User { set; get; } public List<CompanyViewModel> Companys { set; get; } public UserCompanyViewModels() { User = new UserViewModel(); Companys = new List<CompanyViewModel>(); } /// <summary> /// Bo To Vo /// </summary> /// <param name="user">业务层实体对象</param> /// <param name="companys">业务层实体对象集合</param> /// <returns>表现层实体</returns> public UserCompanyViewModels ToVo(UserModel user, List<CompanyModel> companys) { UserCompanyViewModels models = new UserCompanyViewModels(); if (user != null) { models.User.UserID = user.UserID; models.User.UserName = user.UserName; } if (companys != null && companys.Count > 0) { foreach (var item in companys) { CompanyViewModel company = new CompanyViewModel(); company.CompanyID = item.CompanyID; company.CompanyName = item.CompanyName; models.Companys.Add(company); } } return models; } } /// <summary> /// 表现层实体 /// </summary> public class UserViewModel { public int UserID { set; get; } public string UserName { set; get; } } /// <summary> /// 表现层实体 /// </summary> public class CompanyViewModel { public int CompanyID { set; get; } public string CompanyName { set; get; } } /// <summary> /// 业务层实体 /// </summary> public class UserModel { public int UserID { set; get; } public string UserName { set; get; } public string UserGander { set; get; } public string UserAddress { set; get; } /// <summary> /// Vo To Bo /// </summary> /// <param name="models">表现层实体对象</param> /// <returns>业务层实体</returns> public UserModel ToBo(UserCompanyViewModels models) { UserModel user = new UserModel(); if (models != null&&models.User!=null) { user.UserID = models.User.UserID; user.UserName = models.User.UserName; } return user; } } /// <summary> /// 业务层实体 /// </summary> public class CompanyModel { public int CompanyID { set; get; } public string CompanyName { set; get; } public string CompanyAddress { set; get; } /// <summary> /// Vo To Bo /// </summary> /// <param name="models">表现层实体对象</param> /// <returns>业务层实体</returns> public List<CompanyModel> ToBo(UserCompanyViewModels models) { List<CompanyModel> companys = new List<CompanyModel>(); if (models != null&&models.Companys!=null && models.Companys.Count > 0) { foreach (var item in models.Companys) { CompanyModel company = new CompanyModel(); company.CompanyID = item.CompanyID; company.CompanyName = item.CompanyName; companys.Add(company); } } return companys; } } }
在这个模型中具备了MVC中Model和BLL层model的转换方法,可能有有人要问为什么,我想说的是如果加入了这种模型转换方法,在同一controller不同action要使用的时候,就可以轻松转换页面视图模型和逻辑层模型的转换,不用重复写代码,简单的封装思想。
二. 在Controller中使用,如下:
[HttpPost] public ActionResult Create(FormCollection collection,UserCompanyViewModels models) { //如果控件有ID的话,可以通过控件Names属性来取值,如 var a = collection["User.UserID"]; try { // TODO: Add insert logic here UserModel user = new UserModel(); user = user.ToBo(models); //然后调用BLL层执行数据库User表操作Save,Update等方法 CompanyModel company = new CompanyModel(); List<CompanyModel> companys = company.ToBo(models); //然后调用BLL层数据库Company表操作Save,Update等方法 return View("Create", models); } catch { return View("Create"); } }
这里可以看到,因为View视图可能使用到的是一个复杂的model,这个model是业务层几个model的组合,甚至是集合List类型,所以在这里可以轻松转换。