码迷,mamicode.com
首页 > Web开发 > 详细

ASP.NET MVC中的模型装配 封装方法 非常好用

时间:2015-08-29 11:04:26      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:

我们知道在asp.net mvc中 视图可以绑定一个实体模型

然后我们三层架构中也有一个model模型

但是这两个很多时候却是不一样的对象来的

就拿微软的官方mvc例子来说明

微软的视图实体中 有loginmodel 有registermodel 等等 这些视图模型 都只是占用户实体的某几个字段而已,

那么这个时候 我们可以用下面两个方法来转换 自动赋值两个对象的

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

ASP.NET MVC中的模型装配 封装方法 非常好用

标签:

原文地址:http://www.cnblogs.com/maijin/p/4768684.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!