简介:
做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>();
源码:
using System;using System.Collections.Generic;using System.Linq;using System.Web; namespace SyntacticSugar{/// <summary>/// ** 描述:表单帮助类/// ** 创始时间:2015-4-17/// ** 修改时间:-/// ** 作者:sunkaixuan/// ** qq:610262374 欢迎交流,共同提高 ,命名语法等写的不好的地方欢迎大家的给出宝贵建议/// </summary>public class RequestToModel{ /// <summary>/// 提交表单通过反射获取单个像/// 注意:表单控件name必包含对应类中的第一个字段,否则将报错/// </summary>public static T GetSingleForm<T>() where T : new(){T t = SetList<T>(null, 0).Single();return t;}/// <summary>/// 提交表单通过反射获取单个像/// 注意:表单控件name必包含对应类中的第一个字段,否则将报错/// <param name="appstr">控件前缀,比如 name="form1.sex" appstr可以设为form1</param>/// </summary>public static T GetSingleForm<T>(string appstr) where T : new(){T t = SetList<T>(appstr, 0).Single();return t;} /// <summary>/// 提交表单通过反射获取多个对像/// 注意:表单控件name必包含对应类中的第一个字段,否则将报错/// </summary>/// <typeparam name="type"></typeparam>/// <param name="type"></param>/// <returns></returns>public static List<T> GetListByForm<T>() where T : new(){List<T> t = SetList<T>(null, 0);return t;} /// <summary>/// 提交表单通过反射获取多个对像/// 注意:表单控件name必包含对应类中的第一个字段,否则将报错/// </summary>/// <typeparam name="type"></typeparam>/// <param name="appstr">控件前缀,比如 name="form1.sex" appstr可以设为form1</param>/// <returns></returns>public static List<T> GetListByForm<T>(string appstr) where T : new(){List<T> t = SetList<T>(appstr, 0);return t;}/// <summary>/// 提交表单通过反射获取多个对像/// </summary>/// <typeparam name="type"></typeparam>/// <param name="appstr">控件前缀,比如 name="form1.sex" appstr可以设为form1</param>/// <typeparam name="index">表单控件中第一个控件,对应类中字段在该类中的索引号,特殊情况可以是第二第三控件</typeparam>/// <returns></returns>private static List<T> GetListByForm<T>(string appstr, int index) where T : new(){List<T> t = SetList<T>(appstr, index);return t;} private static List<T> SetList<T>(string appendstr, int index) where T : new(){List<T> t = new List<T>();try{var properties = new T().GetType().GetProperties();var subNum = System.Web.HttpContext.Current.Request[appendstr + properties[index].Name].Split(",").Length;for (int i = 0; i < subNum; i++){var r = properties;var model = new T();foreach (var p in properties){string pval = System.Web.HttpContext.Current.Request[appendstr + p.Name + ""];if (!string.IsNullOrEmpty(pval)){pval = pval.Split(",")[i];string pptypeName = p.PropertyType.Name;p.SetValue(model, Convert.ChangeType(pval, p.PropertyType), null);}}t.Add(model);}}catch (Exception ex){throw ex;}return t;}}}