本文屬于原創,轉載時請標明出處!
折磨了我一個晚上的問題,奈何對物理的反射印象太深了,整天去想著物理的反射、折射怎么解。感謝少將哥哥給我的指點,經過一個晚上對反射的惡補,最終搞定了。紀念一下。
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() > 0)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; //修改數據的ID27 history.ipAddress = HanNeng.Common.GetClientIP.GetRealIP(); //獲取當前用戶的IP地址28 atrr = property.GetCustomAttributes(typeof(Model.Atrributes.ModifyFields), false)[0] 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 }View Code
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 FieldsName17 {18 get;19 set;20 }21 }Model
1 /// <summary>2 /// 科部3 /// </summary>4 [Atrributes.ModifyFields("科部")]5 public int? SubjectDep6 {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.CS4.最終的效果圖:

新聞熱點
疑難解答