.NET MVC通过反射获取数据修改历史记录,并插入数据表中
本文属于原创,转载时请标明出处!
折磨了我一个晚上的问题,奈何对物理的反射印象太深了,整天去想着物理的反射、折射怎么解。感谢少将哥哥给我的指点,经过一个晚上对反射的恶补,最终搞定了。纪念一下。
1.核心代码:
- private static void IsUpdate<T>(T old, T current, string id)
- {
- Model.PerFileHistory history = new Model.PerFileHistory();
- Model.Atrributes.ModifyFields atrr = null;
- Type type = typeof(T);
- PropertyInfo[] propertys = type.GetProperties();
- foreach (PropertyInfo property in propertys)
- {
- if (property.PropertyType.IsValueType || property.PropertyType.Name == "String")
- {
- if (property.PropertyType.FullName.Contains("Guid"))
- continue;
- //if (property.Name != "CreateUserID" && property.Name != "CreateTime" && property.Name != "ModifyUserID" && property.Name != "LastModifyTime")//排除这些字段不做判断
- //{
- if (property.GetCustomAttributes(typeof(Model.Atrributes.ModifyFields), false).Count() > )
- {
- object o1 = property.GetValue(old, null); //以前的值
- object o2 = property.GetValue(current, null); //修改后的值
- string str1 = o1 == null ? string.Empty : o1.ToString();
- string str2 = o2 == null ? string.Empty : o2.ToString();
- //判断两者是否相同,不同则插入历史表中
- if (str1 != str2)
- {
- history.BeforeValue = str1; //修改前的值
- history.AfterValue = str2; //修改后的值
- history.PCardNo = id; //修改数据的ID
- history.IPAddress = HanNeng.Common.GetClientIP.GetRealIP(); //获取当前用户的IP地址
- atrr = property.GetCustomAttributes(typeof(Model.Atrributes.ModifyFields), false)[] as Model.Atrributes.ModifyFields;
- history.ModifyField = property.Name; //修改的字段名称
- history.ModifyFieldName = atrr.FieldsName; //修改的字段中文名称
- new BLL.PerFileHistory().AddModel(history);
- }
- }
- //}
- }
- }
- }
2.获取字段中文名,这个是在Model的类名里设置,示例如下:
- /// <summary>
- /// 获取字段名称
- /// </summary>
- public class ModifyFields : Attribute
- {
- public ModifyFields()
- {
- }
- public ModifyFields(string name)
- {
- this.FieldsName = name;
- }
- /// <summary>
- /// 修改的字段中文名
- /// </summary>
- public string FieldsName
- {
- get;
- set;
- }
- }
Model
- /// <summary>
- /// 科部
- /// </summary>
- [Atrributes.ModifyFields("科部")]
- public int? SubjectDep
- {
- set { _subjectdep = value; }
- get { return _subjectdep; }
- }
Model类名示例
3.调用方式示例:
- if (id != null)
- {
- Model.PersonFile Person = bllPerson.GetModel<Model.PersonFile>(id);
- if (modelPerson != null)
- {
- Model.Identity identity = Session["Identity"] as Model.Identity;
- //if (identity.RoleIDs.ToString() == "R01") //如果是系统管理员,则不记录历史
- //{
- //对前后数据的不同进行比较
- Model.PersonFile OldPerson = Person;
- Model.PersonFile NewPerson = modelPerson;
- NewPerson.PersonAutoID = OldPerson.PersonAutoID;
- IsUpdate(OldPerson, NewPerson, id);
- //}
- }
- }
Controller.CS
4.最终的效果图:
.NET MVC通过反射获取数据修改历史记录,并插入数据表中的更多相关文章
- .NET MVC通过反射获取数据修
.NET MVC通过反射获取数据修 折磨了我一个晚上的问题,奈何对物理的反射印象太深了,整天去想着物理的反射.折射怎么解.感谢少将哥哥给我的指点,经过一个晚上对反射的恶补,最终搞定了.纪念一下. 1. ...
- 使用SQLServer2005插入一条数据时返回当前插入数据的ID
使用SQLServer2005插入一条数据时返回当前插入数据的ID 在执行完插入后 再执行 select @@identity from users 就OK 就是刚才插入的那行的 ID了 补充: @@ ...
- 通过mapreduce把mysql的一张表的数据导到另外一张表中
怎么安装hadoop集群我在这里就不多说了,我这里安装的是三节点的集群 先在主节点安装mysql 启动mysql 登录mysql 创建数据库,创建表格,先把数据加载到表格 t ,表格t2是空的 mys ...
- 45. 腾讯面试题: 使用hashmap 插入数据,怎么样依照插入数据的顺序输出数据
题目:使用hashmap 插入数据,怎么样依照插入数据的顺序输出数据 分析: 使用hashmap插入数据,数据的顺序会改变.能够写个小程序试试. 那怎么样依照插入的顺序输出呢? 方法一: 这是我第一时 ...
- 在MyBatis中查询数据、涉及多参数的数据访问操作、插入数据时获取数据自增长的id、关联表查询操作、动态SQL、关于配置MyBatis映射没有代码提示的解决方案
1. 单元测试 在单元测试中,每个测试方法都需要执行相同的前置代码和后置代码,则可以自定义2个方法,分别在这2个方法中执行前置代码和后置代码,并为这2个方法添加@Before和@After注解,然后, ...
- vue 父组件数据修改,子组件数据未修改
页面: 父组件 <myfeedback></myfeedback> 子组件 <news></news> myfeedback.vue <te ...
- 修改MySQL数据库中表和表中字段的编码方式的方法
今天向MySQL数据库中的一张表添加含有中文的数据,可是老是出异常,检查程序并没有发现错误,无奈呀,后来重新检查这张表发现表的编码方式为latin1并且原想可以插入中文的字段的编码方式也是latin1 ...
- MySQL 插入数据 通过命令提示窗口插入数据
MySQL 表中使用 INSERT INTO SQL语句来插入数据. 你可以通过 mysql> 命令提示窗口中向数据表中插入数据,或者通过PHP脚本来插入数据. 语法 以下为向MySQL数据表插 ...
- hive sql 查询一张表的数据不在另一张表中
有时,我们需要对比两张表的数据,找到在其中一张表,不在另一张表中的数据 hql 如下: SELECT * FROM (SELECT id FROM a WHERE dt = '2019-03-17' ...
随机推荐
- Sql Server索引(转载)
官方说法: 聚集索引 一种索引,该索引中键值的逻辑顺序决定了表中相应行的物理顺序. 聚集索引确定表中数据的物理顺序.聚集索引类似于电话簿,后者按姓氏排列数据.由于聚集索引规定数据在表中的物理存储顺序, ...
- 解决animate动画连续播放bug
在animate动画中,如果几个div之间频繁切换,会导致鼠标移开后,动画仍在继续,解决方法有两个 一个,判断当前是否在运行动画: if(!$(".block").is(" ...
- PHP扩展开发(5) - PHP常量的定义和读取
1. 定义 //定义PHP常量REGISTER_STRINGL_CONSTANT("SIMPLE_VERSION", PHP_SIMPLE_VERSION, sizeof(PH ...
- JavaScript获取Select下拉框Option的Value和Text值的方法
Js获取select下拉列表框各个Option的Value值相对比较容易,不过获取Text值却有点麻烦,对于一个初学JavaScript的 新手来说,可能一时还无从下手,那么就请看下本文的方法,以一个 ...
- [算法导论]贪心算法(greedy algorithm)
转载请注明出处:http://www.cnblogs.com/StartoverX/p/4611544.html 贪心算法在每一步都做出当时看起来最佳的选择.也就是说,它总是做出局部最优的选择,寄希望 ...
- 利用mongoimport命令导入csv大文件
最近我同事做了一个PHP项目,其中有一个功能是 上传excel文件并将数据导入mongodb某个集合中. 通常的做法是 写一个上传文件的页面,然后后端 读取 这个文件,利用phpexcel类库将这个e ...
- 系统共享内存的修改(ORA-27102: out of memory)
http://ccchencheng.blog.51cto.com/2419062/738188 http://blog.csdn.net/leshami/article/details/874602 ...
- 知方可补不足~用xsl来修饰xml
概念相关 XSL是可扩展样式表语言的外语缩写,是一种用于以可读格式呈现 XML(标准通用标记语言的子集)数据的语言. 起始于 XSL 万维网联盟(W3C)开始发展 XSL 的原因是:存在着对于基于 X ...
- [小知识] 获取浏览器UA标识
这个随笔纯粹是小知识的积累,以后都会打上小知识的标签. 经常见的,下载移动app时,只有一个二维码,但扫码后,会根据手机是iphone还是android下载不同app,下面就是这个操作的代码: < ...
- HtmlParser 2.0 中文乱码问题
对于HTMLParser 2.0 工具包我们需要修改其中的Page.java文件使其适用中文的html文件分析. 主要是把protected static final String DEFAULT_C ...