ASP.NET WebForm Form表单如何实现MVC那种“自动装配”
2015-06-08 11:12
597 查看
我们知道ASP.NET MVC有个强大的地方就是Form表单提交到action的时候,可以直接将Form的参数直接装配到action的参数实体对象中
比如
action方法 Register(UserModel userModel)
{
.............................
}
在提交表单的时候,会自动讲表单里面的字段封装到对应的UserModel字段里面
那么 WebForm里面可不可以也紫将呢?
因为每次都要去获得数据,优秀的程序员应该要学会代码封装,代码复用,重复的工作不要做
我们其实可以利用反射来实例化对象的(自动装配)北盟网www.bamn.cn
好了废话不多....
pageload里面很简单了
关键就是基类里面的AssembleModel 方法了
基类里面
我们首先获取到上下文的参数 IT404
基类很简单,就是将上下文的提交的参数存放到valueCollection
然后再看AssembleModel方法了,这是一个泛型方法
很简单,就是遍历参数,然后用反射遍历出实体类的共有属性,然后根据名字name来匹配和赋值
所以以后我们只需要一句代码 就能自动装配上从客户端存过来的值了
UserModel userModel = AssembleModel<UserModel>(base.valueCollection);
转自:http://www.cnblogs.com/maijin/p/4559111.html
比如
action方法 Register(UserModel userModel)
{
.............................
}
在提交表单的时候,会自动讲表单里面的字段封装到对应的UserModel字段里面
那么 WebForm里面可不可以也紫将呢?
因为每次都要去获得数据,优秀的程序员应该要学会代码封装,代码复用,重复的工作不要做
我们其实可以利用反射来实例化对象的(自动装配)北盟网www.bamn.cn
好了废话不多....
pageload里面很简单了
protected void Page_Load(object sender, EventArgs e) { if (!IsPost()) { InitPage();//第一次访问呈现页面 } else { UserModel userModel = AssembleModel<UserModel>(base.valueCollection); } }
关键就是基类里面的AssembleModel 方法了
基类里面
我们首先获取到上下文的参数 IT404
protected NameValueCollection valueCollection = HttpContext.Current.Request.Params;
基类很简单,就是将上下文的提交的参数存放到valueCollection
然后再看AssembleModel方法了,这是一个泛型方法
/// <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; } /// <summary> /// 根据NameValueCollection 自动装配 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="valueCollection"></param> /// <returns></returns> protected T AssembleModel<T>(NameValueCollection valueCollection) { PropertyInfo[] propertyInfoList = GetPropertyInfoArray(typeof(T)); object obj = Activator.CreateInstance(typeof(T), null);//创建指定类型实例 foreach (string key in valueCollection.Keys)//所有上下文的值 { foreach (var PropertyInfo in propertyInfoList)//所有实体属性 { if (key.ToLower() == PropertyInfo.Name.ToLower()) { PropertyInfo.SetValue(obj, valueCollection[key], null);//给对象赋值 } } } return (T)obj; }
很简单,就是遍历参数,然后用反射遍历出实体类的共有属性,然后根据名字name来匹配和赋值
所以以后我们只需要一句代码 就能自动装配上从客户端存过来的值了
UserModel userModel = AssembleModel<UserModel>(base.valueCollection);
转自:http://www.cnblogs.com/maijin/p/4559111.html
相关文章推荐
- 自定义ASP.NET Identity(三)- 实现自定义MySQL ASP.NET Identity存储提供程序
- 服务中没有ASP.net State service 状态服务 (ASP.NET state server)
- ASP.net MVC4 AsyncController异步action无法异步执行?
- asp.net发送电子邮件
- asp.net mvc 路由功能
- 使用JasperReport+iReport进行Web报表开发
- asp.net----转
- 支持ASP.NET MVC、WebFroM的表单验证框架ValidationSuar使用介绍
- asp.net 常用于客户端注册的机器信息
- C#、ASP.NET通用扩展工具类之TypeParse
- C#、ASP.NET通用扩展工具类之LogicSugar
- C#、ASP.NET通用工具类IsWhat?(可以判断数字、身份证、数据类型等等)
- 简单好用的ASP.NET分页类(支持AJAX、自定义文字)
- ASP.NET简单好用功能齐全图片上传工具类(水印、缩略图、裁剪等)
- ASP.NET实现的简单易用文件上传类
- ASP.NET中Global.asax 文件是什么?
- ASP.NET中实现把form表单元素转为实体对象或集合
- ASP.NET中利用DataList实现图片无缝滚动
- Asp.Net 之 服务器端控件与客户端控件的区别
- ASP.NET中实现根据匿名类、datatable、sql生成实体类