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

MVC中Model BLL层Model模型互转的更多相关文章

  1. mvc中动态给一个Model类的属性设置验证

    原文:mvc中动态给一个Model类的属性设置验证 在mvc中有自带的验证机制,比如如果某个字段的类型是数字或者日期,那么用户在输入汉字或者英文字符时,那么编译器会自动验证并提示用户格式不正确,不过这 ...

  2. MVC中的七层架构

    工厂模式的七层架构 1.创建Model,实现业务实体. 2.创建IDAL,实现接口. 3.创建DAL,实现接口里的方法. 4.创建DBUtility,数据库操作类5.创建DALFactory,抽象工程 ...

  3. Spring.NET在MVC中实现业务层和UI层解耦

    最近在项目中用到了Spring.NET,使用它来实现业务层和UI层解耦.使用过程中难免遇到问题,现把遇到的一些问题整理出来,留作笔记. 使用的开发工具是vs2017,.netframework 4.6 ...

  4. 将MVC中的Controllers、Model和View分别放到单独的项目中

    Model: 新建-项目-Windows-类库 MVCTest.Model Controller:新建-项目-Windows-控制台应用程序 MVCTest.Bussiness Views:新建-项目 ...

  5. MVC中javascript直接调用Model

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

  6. 浅谈MVC中的service层(转)

    概述 mvc框架由model,view,controller组成,执行流程一般是:在controller访问model获取数据,通过view渲染页面. mvc模式是web开发中的基础模式,采用的是分层 ...

  7. 【原创】有关Silverlight中自动生成的类中 没有WCF层edmx模型新加入的对象 原因分析。

      前端页面层:    编译老是不通过,报如下如所示错误:     -- 然后下意识的查了下 生成的cs文件,没有搜到根据edmx 生成的 对应的类.       结果整理: 1.尽管在 edmx 模 ...

  8. 关于Asp.Net MVC 中 UpdateModel 的未能更新***模型的 解决方案!

    解决方案参考: http://blog.csdn.net/hudaijun/article/details/7293129 想法: 其实,不用UpdateModel,虽然笨些,但不会出什么古怪问题.当 ...

  9. MVC中如何跳过对模型中某个属性的验证

    [HttpPost] public ActionResult Create(Users user) { ModelState.Remove(“Password”); //加上这句就行了 if (Mod ...

随机推荐

  1. MySQL 性能调优

    MySQL 性能调优   索引 索引是什么 官方介绍索引是帮助MySQL高效获取数据的数据结构.笔者理解索引相当于一本书的目录,通过目录就知道要的资料在哪里,不用一页一页查阅找出需要的资料. 索引目的 ...

  2. java SDK服务端推送 --极光推送(JPush)

    网址:https://blog.csdn.net/duyusean/article/details/86581475 消息推送在APP应用中越来越普遍,来记录一下项目中用到的一种推送方式,对于Andr ...

  3. centos上传命令

    首先安装lrzsz # yum -y install lrzsz 1.上传文件,执行命令rz,会跳出文件选择窗口,选择好文件,点击确认即可. # rz 运行rz命令后弹出选择文件窗口,找到要上传的文件 ...

  4. Set JAVA_HOME in windows cmd(在windows 命令行中修改JAVA_HOME)

    set JAVA_HOME=jrepathset PATH=%JAVA_HOME%\bin;%PATH%注意这里没有引号.这样就不需要在我的电脑属性中修改java_home了,以及重启命令行了.对于程 ...

  5. mybatis查询mysql的datetime类型数据时间差了14小时

    场景: 数据库字段: mybatis使用 now() 生成时间. 结果: 使用mybatis查询mysql中的数据时,所有时间都比数据库时间多了14小时,考虑了一下,初步判定是系统时区的问题.因为my ...

  6. linux系统错误码大全

    #define EPERM 1 /* Operation not permitted */ #define ENOENT 2 /* No such file or directory */ #defi ...

  7. kotlin基础 字符串比较 equal

    strring.equal(str,boolean) boolean=False,默认值,区分大小写 boolean=True,不区分大小写

  8. 全新思维导图 XMind ZEN v10.0.0 中文破解版

    http://www.carrotchou.blog/20331.html 官网 https://www.xmind.cn/ 注意事项 破解版本已经去除了全部的官方试用版的限制,让大家可以像正版用户一 ...

  9. angular自定义module

    在app.module.ts里面,imports部分,添加你的自定义模块名在你的自定义模块内,添加了component以后,需要添加exports导出,类似下面 import { NgModule } ...

  10. nand flash 擦除指定的区域

    Nand falsh 在 u-boot 里面,是可以执行擦除操作的. 擦除整个 Nand 的命令: nand erase.chip 擦除部分区域 nand erase.spread 0x0 0x780 ...