ASP.NET MVC中的模型装配 封装方法 非常好用
我們知道在asp.net?mvc中?視圖可以綁定一個實體模型
然后我們三層架構中也有一個model模型
但是這兩個很多時候卻是不一樣的對象來的
就拿微軟的官方mvc例子來說明
??? 微軟的視圖實體中?有loginmodel?有registermodel?等等?這些視圖模型?都只是占用戶實體的某幾個字段而已,甚至有一些視圖模型 的字段是來自多個表的,那么很多人可能用最原始的賦值方法,比如用戶注冊后 拿到post過來后的實體,這個時候再重新new一個三層的model實體,然后在一個個的字段賦值過來,
?比如:
?? [httppost]
?? public ActionResult Register(LoginModel model)
? {
???????? UserModel userModel = new UserModel();
??????? userModel.Name = model.Name;
??????? userModel.Email = model.Email;
??????? userModel.Password = model.Password;
??????? ......................................
??????? UserDao.Add(userModel);
?? }
這樣非常累贅,簡直就是體力活。
?? 下面我總結了兩個方法,這兩個方法可以自動地根據實體的屬性名稱自動的賦值過來,第一個是將某個實體的屬性值之間賦值到一個新的實體中,如果新的實體中含有自己的屬性,那么就用初始值,第二個是將一個A的實體賦值到B中
那么這個時候?我們可以用下面兩個方法來轉換?自動賦值兩個對象的
protected T AssembleInfo<T, T2>(T2 model)
??????? {
??????????? PropertyInfo[] propertyInfoList = GetPropertyInfoArray(typeof(T));
??????????? PropertyInfo[] propertyInfoList2 = GetPropertyInfoArray(typeof(T2));
??????????? object obj = Activator.CreateInstance(typeof(T), null);//創建指定類型實例
??????????? for (int i = 0; i < propertyInfoList.Length; i++)
??????????? {
??????????????? for (int J = 0; J < propertyInfoList2.Length; J++)
??????????????? {
??????????????????? if (propertyInfoList2[J].Name.ToLower() == propertyInfoList[i].Name.ToLower())
??????????????????? {
??????????????????????? propertyInfoList[i].SetValue(obj, propertyInfoList2[J].GetValue(model,null), null);//給對象賦值
??????????????????? }
??????????????? }
??????????? }
??????????? return (T)obj;
??????? }
??????? /// <summary>
??????? /// 反射獲取類的屬性
??????? /// </summary>
??????? /// <param name="type"></param>
??????? /// <returns></returns>
??????? protected PropertyInfo[] GetPropertyInfoArray(Type type)
??????? {
??????????? PropertyInfo[] props = null;
??????????? try
??????????? {
??????????????? object obj = Activator.CreateInstance(type);
??????????????? props = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
??????????? }
??????????? catch (Exception ex)
??????????? {
??????????? }
??????????? return props;
??????? }
?
---------------------使用的時候?只需要
ModelInfo info = AssembleInfo<ModelInfo, ModelModel>(model);
就可以自動根據屬性名稱自動將modelmodel這個實體的值自動賦值到modelinfo
?
感謝你的閱讀,希望對你有幫助 謝謝
轉載于:https://www.cnblogs.com/maijin/p/4768684.html
總結
以上是生活随笔為你收集整理的ASP.NET MVC中的模型装配 封装方法 非常好用的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 手机内置天线慎用FPC
- 下一篇: MSDE 认证方式
