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
感谢你的阅读,希望对你有帮助 谢谢
ASP.NET MVC中的模型装配 封装方法 非常好用的更多相关文章
- Asp.net Mvc 中的模型绑定
		
asp.net mvc中的模型绑定可以在提交http请求的时候,进行数据的映射. 1.没有模型绑定的时候 public ActionResult Example0() { ) { string id ...
 - Asp.net MVC 中超链接的三个方法及比较
		
在Asp.net WebForm开发中,我们通过a标签进行跳转时,通常的写法是:<a href="index.aspx">首页</a>, 在Asp.net ...
 - 在ASP.NET MVC中使用jQuery的Load方法加载静态页面的一个注意点
		
使用使用jQuery的Load方法可以加载静态页面,本篇就在ASP.NET MVC下实现. Model先行: public class Article { public int Id { get; s ...
 - ASP.NET MVC中的模型绑定
		
模型绑定的本质 任何控制器方法的执行都受action invoker组件(下文用invoker代替)控制.对于每个Action方法的参数,这个invoker组件都会获取一个Model Binder ...
 - asp.net MVC 中 Session统一验证的方法
		
验证登录状态的方法有:1 进程外Session 2 方法过滤器(建一个类继承ActionFilterAttribute)然后给需要验证的方法或控制器加特性标签 3 :新建一个BaseContro ...
 - 如何在asp.net mvc中添加自定义的HTML辅助种方法
		
很久没在博客园发表文章了,今天来总结一下如何在asp.net mvc中添加自定义的HTML辅助方法.我们现在设计这么一个目前,利用自定义的HTML方法来渲染一个普通的img标记.直接进入主题吧: 首先 ...
 - [asp.net mvc 奇淫巧技] 01 - 封装上下文  -  在View中获取自定义的上下文
		
我们在asp.net 开发中已经封装了最强大的HttpContext,我们可以在HttpContext中可以获取到几乎任何想获取的东西,也可以在HttpContext写入需要返回客户端的信息.但是这些 ...
 - ASP.NET MVC中使用窗体验证出现上下文的模型在数据库创建后发生更改,导致调试失败(一)
		
在ASP.NET MVC中使用窗体验证.(首先要明白,验证逻辑是应该加在Model.View和Controller哪一个里面?由于Model的责任就是负责信息访问与商业逻辑验证的,所以我们把验证逻辑加 ...
 - Asp.net mvc 中View 的呈现(二)
		
[toc] 上一节介绍了 Asp.net mvc 中除 ViewResult 外的所有的 ActionResult,这一节介绍 ViewResult. ViewResultBase ViewResul ...
 
随机推荐
- “FAIL - Deployed application at context path but context failed to start”错误的解决
			
Netbeans调试错误,出现以下信息,无法启动浏览器调试. Attached JPDA debugger to localhost:tomcat_shared_memory_id 正在取消部署... ...
 - SQL Server优化技巧之SQL Server中的"MapReduce"
			
日常的OLTP环境中,有时会涉及到一些统计方面的SQL语句,这些语句可能消耗巨大,进而影响整体运行环境,这里我为大家介绍如何利用SQL Server中的”类MapReduce”方式,在特定的统计情形中 ...
 - 意外作出了一个javascript的服务器,可以通过js调用并执行任何java(包括 所有java 内核基本库)及C#类库,并最终由 C# 执行你提交的javascript代码! 不敢藏私,特与大家分
			
最近研发BDC 云开发部署平台的数据路由及服务管理器意外作出了一个javascript的服务器,可以通过js调用并执行任何java(包括 所有java 内核基本库)及C#类库,并最终由 C# 执行你提 ...
 - EmberJs之Ember-Data
			
写在前面 最近比较忙,换了新工作还要学习很多全新的技术栈,并给自己找了很多借口来不去坚持写博客.常常具有讽刺意味的是,更多剩下的时间并没有利用而更多的是白白浪费,也许这就是青春吧,挥霍吧,这不是我想要 ...
 - spring mvc ajax返回值乱码
			
加入如下配置: <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHan ...
 - jQuery的XX如何实现?——1.框架
			
源码链接:内附实例代码 jQuery使用许久了,但是有一些API的实现实在想不通.于是抽空看了jQuery源码,现在把学习过程中发现的一些彩蛋介绍给大家(⊙0⊙). 下面将使用简化的代码来介绍,主要关 ...
 - 使用ConditionalScope进行高效的SharePoint CSOM编程
			
在上一篇文章中讲述了 ExceptionHandlingScope的使用后,本章主要讲述ConditionalScope的用法. ConditionalScope在设计思路和解决问题上同Excepti ...
 - atitit.提升开发效率---MDA 软件开发方式的革命(4)----编辑表单建模
			
)----编辑表单建模 1. 建模语言的选型anno+html...不是uml 1 2. 指定显示模板 @BeanEditForm(tmplt="c:/edit.html") 1 ...
 - Django基础——Form&Ajax篇
			
一 Form 在实际的生产环境中,登录和注册时用户提交的数据浏览器端都会使用JavaScript来进行验证(比如验证输入是否为空以及输入是否合法),但是浏览器可能会禁用JavaScirpt,同时也有人 ...
 - Spring 之autowired
			
Spring中autowired主要用于装配树形值,其关键类为BeanWrapperImpl,阅读代码发现其关键方法setPropertyValue有如下一段代码. PropertyHandler p ...