利用反射,泛型,静态方法快速获取表单值到Model。
2009-08-31 23:23
489 查看
初级的,很简单,牛人可以不看了。不过还算实用。
在项目中经常需要处理表单,给model赋值,很烦人的一些重复代码。如下边的代码:
News news = new News();
news.Id = int.Parse(Request.Form["Id"]);
news.Category = int.Parse(Request.Form["Category"]);
news.Title = Request.Form["Title"];
news.CreateTime = DateTime.Parse(Request.Form["CreateTime"]);经常还会出现写错情况,尤其是加班写这种无聊代码的时候...
使用反射,泛型,静态方法可以很容易解决这个问题。说的好像有点高深,其实超级简单。见代码。
public static class HenqPost<T> where T: new()
{
/**//// <summary>
/// 为Model赋值
/// </summary>
/// <typeparam name="T">Model</typeparam>
/// <param name="t">model</param>
/// <param name="form">Request</param>
/// <returns></returns>
public static int GetPost<T>(ref T t, NameValueCollection form)
{
int va=0;
Type type = t.GetType();//获取类型
PropertyInfo[] pi=type.GetProperties();//获取属性集合
foreach( PropertyInfo p in pi )
{
if (form[p.Name] != null)
{
try
{
p.SetValue(t, Convert.ChangeType(form[p.Name], p.PropertyType), null);//为属性赋值,并转换键值的类型为该属性的类型
va++;//记录赋值成功的属性数
}
catch
{
}
}
}
return va;
}
}只所以用静态方法,主要是图方便,不用new。
以后所有的表单都可以很简单的处理了,两行代码搞定。
News news = new News();
HenqPost<News>.GetPost(ref news, Request.Form);
//烦人的为实体类赋值就Over了。不需要任何配置,约定是最好的配置。
约定:表单项的名称最好和实体类的属性名字对应(如果你要不一样,反射方法根据自己的规则改造下)。
为表单赋值,如果是webform的话也可以采取这种方式,可以自己写下,原理差不多。
在项目中经常需要处理表单,给model赋值,很烦人的一些重复代码。如下边的代码:
News news = new News();
news.Id = int.Parse(Request.Form["Id"]);
news.Category = int.Parse(Request.Form["Category"]);
news.Title = Request.Form["Title"];
news.CreateTime = DateTime.Parse(Request.Form["CreateTime"]);经常还会出现写错情况,尤其是加班写这种无聊代码的时候...
使用反射,泛型,静态方法可以很容易解决这个问题。说的好像有点高深,其实超级简单。见代码。
public static class HenqPost<T> where T: new()
{
/**//// <summary>
/// 为Model赋值
/// </summary>
/// <typeparam name="T">Model</typeparam>
/// <param name="t">model</param>
/// <param name="form">Request</param>
/// <returns></returns>
public static int GetPost<T>(ref T t, NameValueCollection form)
{
int va=0;
Type type = t.GetType();//获取类型
PropertyInfo[] pi=type.GetProperties();//获取属性集合
foreach( PropertyInfo p in pi )
{
if (form[p.Name] != null)
{
try
{
p.SetValue(t, Convert.ChangeType(form[p.Name], p.PropertyType), null);//为属性赋值,并转换键值的类型为该属性的类型
va++;//记录赋值成功的属性数
}
catch
{
}
}
}
return va;
}
}只所以用静态方法,主要是图方便,不用new。
以后所有的表单都可以很简单的处理了,两行代码搞定。
News news = new News();
HenqPost<News>.GetPost(ref news, Request.Form);
//烦人的为实体类赋值就Over了。不需要任何配置,约定是最好的配置。
约定:表单项的名称最好和实体类的属性名字对应(如果你要不一样,反射方法根据自己的规则改造下)。
为表单赋值,如果是webform的话也可以采取这种方式,可以自己写下,原理差不多。
相关文章推荐
- 利用反射,泛型,静态方法快速获取表单值到Model
- 利用反射,泛型,静态方法快速获取表单值到Model(转)
- 利用反射,泛型,静态方法快速获取表单值到Model。(转)
- 利用反射,泛型,静态方法快速获取表单值到Model
- \t\t利用反射,泛型,静态方法快速获取表单值到Model
- 利用反射,泛型,静态方法快速获取表单值到Model。(Henq)
- asp.net实现利用反射,泛型,静态方法快速获取表单值到Model的方法
- asp.net实现利用反射,泛型,静态方法快速获取表单值到Model的方法
- 利用反射,泛型,扩展方法快速获取表单值到实体类
- 利用反射,泛型,扩展方法快速获取表单值到实体类
- 利用反射,泛型获取/存储表单值到Model
- 快速获取表单值到Model(反射+泛型)
- 黑马程序员--Java基础加强--14.利用反射操作泛型III【解析关于泛型类型的细节信息的获取方法】【Method与泛型相关的方法】【个人总结】
- java开发中利用反射获取对象静态的方法
- (二)利用反射机制实例化类,获取和修改变量,获取和调用方法和构造方法
- 利用反射获取方法的反回值类型和参数个数
- 利用泛型和反射,管理配置文件,把Model转换成数据行,并把数据行转换成Model
- 利用反射获取静态类的静态属性值(已知属性名称的字符串表示)
- ASP.NET:通过反射填充泛型集合List的静态方法
- java 反射机制(通过getGenericSuperclass()方法获取到父类泛型的类型)