本文属于原创,转载时请标明出处!

折磨了我一个晚上的问题,奈何对物理的反射印象太深了,整天去想着物理的反射、折射怎么解。感谢少将哥哥给我的指点,经过一个晚上对反射的恶补,最终搞定了。纪念一下。

  1.核心代码:

  1. private static void IsUpdate<T>(T old, T current, string id)
  2. {
  3. Model.PerFileHistory history = new Model.PerFileHistory();
  4. Model.Atrributes.ModifyFields atrr = null;
  5. Type type = typeof(T);
  6. PropertyInfo[] propertys = type.GetProperties();
  7. foreach (PropertyInfo property in propertys)
  8. {
  9. if (property.PropertyType.IsValueType || property.PropertyType.Name == "String")
  10. {
  11. if (property.PropertyType.FullName.Contains("Guid"))
  12. continue;
  13. //if (property.Name != "CreateUserID" && property.Name != "CreateTime" && property.Name != "ModifyUserID" && property.Name != "LastModifyTime")//排除这些字段不做判断
  14. //{
  15. if (property.GetCustomAttributes(typeof(Model.Atrributes.ModifyFields), false).Count() > )
  16. {
  17. object o1 = property.GetValue(old, null); //以前的值
  18. object o2 = property.GetValue(current, null); //修改后的值
  19. string str1 = o1 == null ? string.Empty : o1.ToString();
  20. string str2 = o2 == null ? string.Empty : o2.ToString();
  21. //判断两者是否相同,不同则插入历史表中
  22. if (str1 != str2)
  23. {
  24. history.BeforeValue = str1; //修改前的值
  25. history.AfterValue = str2; //修改后的值
  26. history.PCardNo = id; //修改数据的ID
  27. history.IPAddress = HanNeng.Common.GetClientIP.GetRealIP(); //获取当前用户的IP地址
  28. atrr = property.GetCustomAttributes(typeof(Model.Atrributes.ModifyFields), false)[] as Model.Atrributes.ModifyFields;
  29. history.ModifyField = property.Name; //修改的字段名称
  30. history.ModifyFieldName = atrr.FieldsName; //修改的字段中文名称
  31.  
  32. new BLL.PerFileHistory().AddModel(history);
  33. }
  34. }
  35. //}
  36. }
  37. }
  38. }

  2.获取字段中文名,这个是在Model的类名里设置,示例如下:

  1. /// <summary>
  2. /// 获取字段名称
  3. /// </summary>
  4. public class ModifyFields : Attribute
  5. {
  6. public ModifyFields()
  7. {
  8. }
  9. public ModifyFields(string name)
  10. {
  11. this.FieldsName = name;
  12. }
  13. /// <summary>
  14. /// 修改的字段中文名
  15. /// </summary>
  16. public string FieldsName
  17. {
  18. get;
  19. set;
  20. }
  21. }

Model

  1. /// <summary>
  2. /// 科部
  3. /// </summary>
  4. [Atrributes.ModifyFields("科部")]
  5. public int? SubjectDep
  6. {
  7. set { _subjectdep = value; }
  8. get { return _subjectdep; }
  9. }

Model类名示例

  3.调用方式示例:

  1. if (id != null)
  2. {
  3. Model.PersonFile Person = bllPerson.GetModel<Model.PersonFile>(id);
  4. if (modelPerson != null)
  5. {
  6. Model.Identity identity = Session["Identity"] as Model.Identity;
  7. //if (identity.RoleIDs.ToString() == "R01") //如果是系统管理员,则不记录历史
  8. //{
  9. //对前后数据的不同进行比较
  10. Model.PersonFile OldPerson = Person;
  11. Model.PersonFile NewPerson = modelPerson;
  12. NewPerson.PersonAutoID = OldPerson.PersonAutoID;
  13. IsUpdate(OldPerson, NewPerson, id);
  14. //}
  15. }
  16. }

Controller.CS

  4.最终的效果图:

.NET MVC通过反射获取数据修改历史记录,并插入数据表中的更多相关文章

  1. .NET MVC通过反射获取数据修

    .NET MVC通过反射获取数据修 折磨了我一个晚上的问题,奈何对物理的反射印象太深了,整天去想着物理的反射.折射怎么解.感谢少将哥哥给我的指点,经过一个晚上对反射的恶补,最终搞定了.纪念一下. 1. ...

  2. 使用SQLServer2005插入一条数据时返回当前插入数据的ID

    使用SQLServer2005插入一条数据时返回当前插入数据的ID 在执行完插入后 再执行 select @@identity from users 就OK 就是刚才插入的那行的 ID了 补充: @@ ...

  3. 通过mapreduce把mysql的一张表的数据导到另外一张表中

    怎么安装hadoop集群我在这里就不多说了,我这里安装的是三节点的集群 先在主节点安装mysql 启动mysql 登录mysql 创建数据库,创建表格,先把数据加载到表格 t ,表格t2是空的 mys ...

  4. 45. 腾讯面试题: 使用hashmap 插入数据,怎么样依照插入数据的顺序输出数据

    题目:使用hashmap 插入数据,怎么样依照插入数据的顺序输出数据 分析: 使用hashmap插入数据,数据的顺序会改变.能够写个小程序试试. 那怎么样依照插入的顺序输出呢? 方法一: 这是我第一时 ...

  5. 在MyBatis中查询数据、涉及多参数的数据访问操作、插入数据时获取数据自增长的id、关联表查询操作、动态SQL、关于配置MyBatis映射没有代码提示的解决方案

    1. 单元测试 在单元测试中,每个测试方法都需要执行相同的前置代码和后置代码,则可以自定义2个方法,分别在这2个方法中执行前置代码和后置代码,并为这2个方法添加@Before和@After注解,然后, ...

  6. vue 父组件数据修改,子组件数据未修改

    页面: 父组件  <myfeedback></myfeedback>  子组件  <news></news> myfeedback.vue <te ...

  7. 修改MySQL数据库中表和表中字段的编码方式的方法

    今天向MySQL数据库中的一张表添加含有中文的数据,可是老是出异常,检查程序并没有发现错误,无奈呀,后来重新检查这张表发现表的编码方式为latin1并且原想可以插入中文的字段的编码方式也是latin1 ...

  8. MySQL 插入数据 通过命令提示窗口插入数据

    MySQL 表中使用 INSERT INTO SQL语句来插入数据. 你可以通过 mysql> 命令提示窗口中向数据表中插入数据,或者通过PHP脚本来插入数据. 语法 以下为向MySQL数据表插 ...

  9. hive sql 查询一张表的数据不在另一张表中

    有时,我们需要对比两张表的数据,找到在其中一张表,不在另一张表中的数据 hql 如下: SELECT * FROM (SELECT id FROM a WHERE dt = '2019-03-17' ...

随机推荐

  1. Sql Server索引(转载)

    官方说法: 聚集索引 一种索引,该索引中键值的逻辑顺序决定了表中相应行的物理顺序. 聚集索引确定表中数据的物理顺序.聚集索引类似于电话簿,后者按姓氏排列数据.由于聚集索引规定数据在表中的物理存储顺序, ...

  2. 解决animate动画连续播放bug

    在animate动画中,如果几个div之间频繁切换,会导致鼠标移开后,动画仍在继续,解决方法有两个 一个,判断当前是否在运行动画: if(!$(".block").is(" ...

  3. PHP扩展开发(5) - PHP常量的定义和读取

    1. 定义   //定义PHP常量REGISTER_STRINGL_CONSTANT("SIMPLE_VERSION", PHP_SIMPLE_VERSION, sizeof(PH ...

  4. JavaScript获取Select下拉框Option的Value和Text值的方法

    Js获取select下拉列表框各个Option的Value值相对比较容易,不过获取Text值却有点麻烦,对于一个初学JavaScript的 新手来说,可能一时还无从下手,那么就请看下本文的方法,以一个 ...

  5. [算法导论]贪心算法(greedy algorithm)

    转载请注明出处:http://www.cnblogs.com/StartoverX/p/4611544.html 贪心算法在每一步都做出当时看起来最佳的选择.也就是说,它总是做出局部最优的选择,寄希望 ...

  6. 利用mongoimport命令导入csv大文件

    最近我同事做了一个PHP项目,其中有一个功能是 上传excel文件并将数据导入mongodb某个集合中. 通常的做法是 写一个上传文件的页面,然后后端 读取 这个文件,利用phpexcel类库将这个e ...

  7. 系统共享内存的修改(ORA-27102: out of memory)

    http://ccchencheng.blog.51cto.com/2419062/738188 http://blog.csdn.net/leshami/article/details/874602 ...

  8. 知方可补不足~用xsl来修饰xml

    概念相关 XSL是可扩展样式表语言的外语缩写,是一种用于以可读格式呈现 XML(标准通用标记语言的子集)数据的语言. 起始于 XSL 万维网联盟(W3C)开始发展 XSL 的原因是:存在着对于基于 X ...

  9. [小知识] 获取浏览器UA标识

    这个随笔纯粹是小知识的积累,以后都会打上小知识的标签. 经常见的,下载移动app时,只有一个二维码,但扫码后,会根据手机是iphone还是android下载不同app,下面就是这个操作的代码: < ...

  10. HtmlParser 2.0 中文乱码问题

    对于HTMLParser 2.0 工具包我们需要修改其中的Page.java文件使其适用中文的html文件分析. 主要是把protected static final String DEFAULT_C ...