MVC中Model BLL层Model模型互转

一. 模型通常可以做2种:充血模型和失血模型,一般做法是模型就是模型,不具备方法来操作,只具有属性,这种叫做失血模型(可能不准确);具备对模型一定的简单操作方法,不只是有属性的模型叫做充血模型,如下:

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 hereUserModel 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类型,所以在这里可以轻松转换。

转载于:https://www.cnblogs.com/weiweithe/p/4305781.html

MVC中Model BLL层Model模型互转相关推荐

  1. mvc中js是如何调用HTML的,MVC中javascript直接调用Model

    最近做一个统计页面, Model从后台已经获取了数据集合,想直接在前台展示,而这个展示是需要用js生成图表的. 控制器部分代码: public ActionResult Index() { var m ...

  2. 多层架构模型中的BLL 与 Model的解释

    理想状态这两个可以合并到一起来,就是业务对象,但model是把这个业务对象中的数据提取了出来,作为一个数据载体,可以在层间传递.业务对象中除去这些数据剩下的方法就构成了BLL层. 显示层Present ...

  3. asp.net MVC 中使用dataannotation验证Model

    看到的一个好文章,讲如何验证Model webconfig中添加 <appSettings>         <add key="ClientValidationEnabl ...

  4. java如何测controller层_用MockMvc对Spring mvc中的controller层进行单元测试

    参考:http://sishuok.com/forum/posts/list/7981.html  ;  http://www.tuicool.com/articles/6nqeIbm 用下面的这种方 ...

  5. Spring MVC 中的 controller层的方法的返回值类型

    Controller方法的返回值可以有以下几种: 1.返回ModelAndView 返回ModelAndView时最常见的一种返回结果.需要在方法结束的时候定义一个ModelAndView对象,并对M ...

  6. ASP.NET MVC5+EF6+EasyUI 后台管理系统(59)-BLL层重构

    系列目录 前言:   这应该是本系统最后一次重构,将重构BLL层和Model层.来完全取代代码生成器生成的BLL层和DAL层.完全废掉了代码生成器的DAL,BLL,MODEL层.  全自动生成增,删, ...

  7. ASP.NET MVC 中解决Session,Cookie等依赖的方式

    目录 介绍 使用Filter方式 Filter在MVC生命周期中的位置 Filter常见的应用场景 Filter的执行顺序 MVC中常见的对Session,Cookie的依赖 使用Filter解除依赖 ...

  8. 如何在ASP.NET MVC中实现提交若干个某模型的数据(某Model的List或ICollection,大小不定)

    背景说明 在ASP.NET MVC中,有一个我们经常使用且十分好用的功能--模型绑定. 即在页面中指定该页面将会使用到的数据模型Model,然后在"显示数据"或"提交数据 ...

  9. 【ASP.NET MVC 学习笔记】- 16 Model Binding(模型绑定)

    本文参考:http://www.cnblogs.com/willick/p/3424188.html. 1.Model Binding是Http请求和Action方法之间的桥梁,是MVC框架根据Htt ...

最新文章

  1. uni-app 音频控制
  2. dbconn Java_DbConnection.java实现简单的MySQL数据库连接
  3. 用pandas填充时间序列缺失值
  4. Java日期处理 开始时间-结束时间查询
  5. c语言666题目,c语言题目及答案
  6. matlab车流量检测,求解释代码,一段交通车流量检测的代码
  7. Android 进程的五种生命周期学习
  8. Delphi 2010 新增功能之: 手势编程[5] - 关于自定义手势
  9. 命令行工具恢复文件 foremost 和 extundelete 简介
  10. pytorch BiLSTM+CRF模型实现NER任务
  11. SpringCloud-网关统一配置跨域
  12. 【深度学习】IMDB数据集上电影评论二分类
  13. 小米5 android 4.1.2,三星GALAXY NOTE i9220 Miui V5完美运行 Android4.1.2 华丽流畅体验
  14. 【转】ORA-28040: 没有匹配的验证协议
  15. 开机弹框显示IGCCTray.exe异常的修复方式
  16. 【电子器件笔记4】电感参数和选型
  17. C++生成正态分布随机数
  18. 双向链表增删改查C语言代码,C语言中双向链表的增删改查输出源文件代码
  19. sting int 转换
  20. 怎么给PDF添加书签,PDF添加书签的方法

热门文章

  1. pwn和逆向的区别_Pwn之简单patch
  2. Vue项目开发过程中解决跨域问题(vue.config.js结合axios)
  3. python网络爬虫系列(六)——数据提取 lxml模块
  4. LeetCode 第 32 场双周赛(983/2957,前33.2%)
  5. LeetCode 508. 出现次数最多的子树元素和(递归)
  6. LeetCode 229. 求众数 II(摩尔投票)
  7. LeetCode 2. 两数相加(单链表反转)
  8. win10主题更换_还不升级? win10精简版不到10G,运行比win7还快,旧电脑的福音
  9. Opencv visual studio c++ 环境搭建
  10. Jquery事件、冒泡、委托与节点