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