首页 > 编程 > .NET > 正文

ASP.NET中实现把form表单元素转为实体对象或集合

2024-07-10 13:29:05
字体:
来源:转载
供稿:网友
这篇文章主要介绍了ASP.NET中实现把form表单元素转为实体对象或集合,本文又是一个对重复数据处理的一个封装,非常实用的开发技巧,需要的朋友可以参考下
 

简介:

做WEBFROM开发的同学都知道后台接收参数非常麻烦

虽然MVC中可以将表单直接转为集实,但不支持表单转为 LIST<T>这种集合

单个对象的用法:

表单:

 

复制代码代码如下:

<input name='id'  value='1' >
<input name='sex'  value='男' >

 

后台:

复制代码代码如下:

//以前写法
            DLC_category d = new DLC_category();
            d.sex = Request["sex"];
            d.id = Convert.ToInt32(Request["id"]);

 


            //现在写法
            var category = RequestToModel.GetSingleForm<DLC_category>();

 

集合对象的用法:

表单:

复制代码代码如下:

<input name='id'  value='1' >
<input name='sex'  value='男' >
 
 
<input name='id'  value='2' >
<input name='sex'  value='女' >
 
<input name='id'  value='3' >
<input name='sex'  value='女' >

后台:
复制代码代码如下:

  List<DLC_category> categoryLists = RequestToModel.GetListByForm<DLC_category>();

 

源码:

 

  1. using System; 
  2. using System.Collections.Generic; 
  3. using System.Linq; 
  4. using System.Web; 
  5.   
  6. namespace SyntacticSugar 
  7.   /// <summary> 
  8.   /// ** 描述:表单帮助类 
  9.   /// ** 创始时间:2015-4-17 
  10.   /// ** 修改时间:- 
  11.   /// ** 作者:sunkaixuan 
  12.   /// ** qq:610262374 欢迎交流,共同提高 ,命名语法等写的不好的地方欢迎大家的给出宝贵建议 
  13.   /// </summary> 
  14.   public class RequestToModel 
  15.   { 
  16.   
  17.     /// <summary> 
  18.     /// 提交表单通过反射获取单个像 
  19.     /// 注意:表单控件name必包含对应类中的第一个字段,否则将报错 
  20.     /// </summary> 
  21.     public static T GetSingleForm<T>() where T : new() 
  22.     { 
  23.       T t = SetList<T>(null, 0).Single(); 
  24.       return t; 
  25.     } 
  26.   
  27.   
  28.     /// <summary> 
  29.     /// 提交表单通过反射获取单个像 
  30.     /// 注意:表单控件name必包含对应类中的第一个字段,否则将报错 
  31.     /// <param name="appstr">控件前缀,比如 name="form1.sex" appstr可以设为form1</param> 
  32.     /// </summary> 
  33.     public static T GetSingleForm<T>(string appstr) where T : new() 
  34.     { 
  35.       T t = SetList<T>(appstr, 0).Single(); 
  36.       return t; 
  37.     } 
  38.   
  39.     /// <summary> 
  40.     /// 提交表单通过反射获取多个对像 
  41.     /// 注意:表单控件name必包含对应类中的第一个字段,否则将报错 
  42.     /// </summary> 
  43.     /// <typeparam name="type"></typeparam> 
  44.     /// <param name="type"></param> 
  45.     /// <returns></returns> 
  46.     public static List<T> GetListByForm<T>() where T : new() 
  47.     { 
  48.       List<T> t = SetList<T>(null, 0); 
  49.       return t; 
  50.     } 
  51.   
  52.     /// <summary> 
  53.     /// 提交表单通过反射获取多个对像 
  54.     /// 注意:表单控件name必包含对应类中的第一个字段,否则将报错 
  55.     /// </summary> 
  56.     /// <typeparam name="type"></typeparam> 
  57.     /// <param name="appstr">控件前缀,比如 name="form1.sex" appstr可以设为form1</param> 
  58.     /// <returns></returns> 
  59.     public static List<T> GetListByForm<T>(string appstr) where T : new() 
  60.     { 
  61.       List<T> t = SetList<T>(appstr, 0); 
  62.       return t; 
  63.     } 
  64.   
  65.   
  66.     /// <summary> 
  67.     /// 提交表单通过反射获取多个对像 
  68.     /// </summary> 
  69.     /// <typeparam name="type"></typeparam> 
  70.     /// <param name="appstr">控件前缀,比如 name="form1.sex" appstr可以设为form1</param> 
  71.     /// <typeparam name="index">表单控件中第一个控件,对应类中字段在该类中的索引号,特殊情况可以是第二第三控件</typeparam> 
  72.     /// <returns></returns> 
  73.     private static List<T> GetListByForm<T>(string appstr, int index) where T : new() 
  74.     { 
  75.       List<T> t = SetList<T>(appstr, index); 
  76.       return t; 
  77.     } 
  78.   
  79.   
  80.   
  81.     private static List<T> SetList<T>(string appendstr, int index) where T : new() 
  82.     { 
  83.       List<T> t = new List<T>(); 
  84.       try 
  85.       { 
  86.         var properties = new T().GetType().GetProperties(); 
  87.         var subNum = System.Web.HttpContext.Current.Request[appendstr + properties[index].Name].Split(',').Length; 
  88.         for (int i = 0; i < subNum; i++) 
  89.         { 
  90.           var r = properties; 
  91.           var model = new T(); 
  92.           foreach (var p in properties) 
  93.           { 
  94.             string pval = System.Web.HttpContext.Current.Request[appendstr + p.Name + ""]; 
  95.             if (!string.IsNullOrEmpty(pval)) 
  96.             { 
  97.               pval = pval.Split(',')[i]; 
  98.               string pptypeName = p.PropertyType.Name; 
  99.               p.SetValue(model, Convert.ChangeType(pval, p.PropertyType), null); 
  100.             } 
  101.           } 
  102.           t.Add(model); 
  103.         } 
  104.       } 
  105.       catch (Exception ex) 
  106.       { 
  107.   
  108.   
  109.         throw ex; 
  110.       } 
  111.   
  112.   
  113.       return t; 
  114.     } 
  115.   } 
?
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表