简介:

做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;
}
}
}

  

将form表单元素转为实体对象 或集合 -ASP.NET C#的更多相关文章

  1. HTTP上下文表单内容转为实体对象

    using ServiceStack.Web; using System; using System.Collections.Generic; using System.Linq; using Sys ...

  2. 【jQuery】form表单元素序列化为json对象

    序列化form表单元素为json对象: <!Doctype html> <html xmlns=http://www.w3.org/1999/xhtml> <head&g ...

  3. form表单元素的值序列化成对象

    /** * 将form表单元素的值序列化成对象 * param: form jquery form对象 */ var serializeObject = function(form) { var o ...

  4. 将form表单元素的值序列化成对象

    /**jQuery * 将form表单元素的值序列化成对象 * @returns object */ var serializeObject = function(form) { var o = {} ...

  5. 拓展jQuery的serialize(),将form表单转化为json对象

    jQuery 的 serialize() 方法经常会报 Uncaught TypeError: JSON.serializeObject is not a function 的错误, 原装的方法真的一 ...

  6. form表单元素设置只读

      form表单元素设置只读 CreateTime--2017年5月5日11:42:41 Author:Marydon 1.设置文本框只读 <!-- 方法一:简写 --> <inpu ...

  7. Form表单元素

    Form表单元素 action method input: name value type: text password button radio checkbox file submit reset ...

  8. jQuery操作Form表单元素

    Web开发中常常须要操作表单,form表单元素有select.checkbox.radio.textarea.button.file.text.hidden.password等. 当中checkbox ...

  9. form表单序列化为Jquery对象

    <form id="DailyFinancial" > @*class="form-inline"*@ <div class="fo ...

随机推荐

  1. Redis常用命令汇总

    Redis HGET获取与字段中存储的键哈希相关联的值D:\web\JH2016\RedisV3.2\2MasterOpenAPI-15698\redis-cli.exe -h 127.0.0.1 - ...

  2. Mac地址绑定的wifi

    可以仿冒mac地址连接到wifi. 1.首先使用cdlinux扫描ssid,抓握手包--当捕获某个连接该wifi的client的时候,记下该client的mac地址. 2.用eswa解码抓包文件,获取 ...

  3. 10条现代EQ技术基础贴士(转)

    前言: 无论是追求复古的模拟音色还是高精度的透明音质,现代电脑音乐制作中层出不断的新EQ插件以其超强的频率塑形和个性化功能为音色的润色和重塑提供了无限可能. 虽然EQ并不是音频工程工具中最复杂的,但是 ...

  4. Android--Sensor传感器

    前言 Android提供了对设备传感器的支持,只要Android设备的硬件提供了这些传感器,Android应用可以通过传感器来获取设备的外界条件,包括手机的运行状态.当前摆放的方向等.Android系 ...

  5. Oracle Essbase入门系列(四)

    成员存储类型 除了大纲计算,维度成员的另一项重要属性是存储类型,存储类型决定维度成员相关单元格的物理存储方式.在维库中编辑成员的[Data Storage]属性,下拉菜单中可选的5种,再加上Share ...

  6. T 泛型转换

    T为左值 result = (T)Convert.ChangeType(o,typeof(T));

  7. ubuntu-16.10-desktop-amd64.iso 版本 安装 oracle 11gR2 11.2.0.1 database

    特点: 需要重新安装:libaio1_0.3.109-2ubuntu?_amd64.deb.默认的libaio库有问题,和其默认libaio的编译方式有关! 需要重新安装gcc 4.x,默认的gcc ...

  8. JS实现剪切板添加网站版权、来源

    公司官网有这样需求,写好后,备份以后留用. 只兼容chrome.firefox.IE9+等主流浏览器. // https://developer.mozilla.org/en-US/docs/Web/ ...

  9. MySql 数据操作类

    /// <summary> /// MySqlHelper 的摘要说明. /// </summary> public class MySqlHelper { public st ...

  10. Linux下添加硬盘,分区,格式化详解

    2005-10-17 在我们添加硬盘前,首先要了解linux系统下对硬盘和分区的命名方法. 在Linux下对IDE的设备是以hd命名的,第一个ide设备是hda,第二个是hdb.依此类推 我们一般主板 ...