将form表单元素转为实体对象 或集合 -ASP.NET C#
简介:
做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#的更多相关文章
- HTTP上下文表单内容转为实体对象
using ServiceStack.Web; using System; using System.Collections.Generic; using System.Linq; using Sys ...
- 【jQuery】form表单元素序列化为json对象
序列化form表单元素为json对象: <!Doctype html> <html xmlns=http://www.w3.org/1999/xhtml> <head&g ...
- form表单元素的值序列化成对象
/** * 将form表单元素的值序列化成对象 * param: form jquery form对象 */ var serializeObject = function(form) { var o ...
- 将form表单元素的值序列化成对象
/**jQuery * 将form表单元素的值序列化成对象 * @returns object */ var serializeObject = function(form) { var o = {} ...
- 拓展jQuery的serialize(),将form表单转化为json对象
jQuery 的 serialize() 方法经常会报 Uncaught TypeError: JSON.serializeObject is not a function 的错误, 原装的方法真的一 ...
- form表单元素设置只读
form表单元素设置只读 CreateTime--2017年5月5日11:42:41 Author:Marydon 1.设置文本框只读 <!-- 方法一:简写 --> <inpu ...
- Form表单元素
Form表单元素 action method input: name value type: text password button radio checkbox file submit reset ...
- jQuery操作Form表单元素
Web开发中常常须要操作表单,form表单元素有select.checkbox.radio.textarea.button.file.text.hidden.password等. 当中checkbox ...
- form表单序列化为Jquery对象
<form id="DailyFinancial" > @*class="form-inline"*@ <div class="fo ...
随机推荐
- windows环境下Eclipse开发MapReduce程序遇到的四个问题及解决办法
按此文章<Hadoop集群(第7期)_Eclipse开发环境设置>进行MapReduce开发环境搭建的过程中遇到一些问题,饶了一些弯路,解决办法记录在此: 文档目的: 记录windows环 ...
- Hello Kraken.js!
前言 kraken.js 由paypal 公司开源的一个用于快速开发基于Express.js框架应用的快速开发工具, 因为kraken 并没有在Express.js基础上更改多少东西,只是在原来的 ...
- BabeLua
http://cn.cocos2d-x.org/tutorial/show?id=507 command : -workdir E:\xg_svn\client\cocos2d-x-2.2.2\pro ...
- IOS中的多线程之GCD
在ios中,使用多线程有三种方式,分别是:NSThread.NSOperation和NSOperationQueue.GCD,在本节,主要讲解一下CDD的使用. GCD(Grand Central D ...
- 阿里大鱼.net core 发送短信
阿里大鱼还未提供 .net core 版SDK,但提供了相关API,下面是.net core版实现,只是简单发送短信功能: using System; using System.Collections ...
- Gradle自定义你的BuildConfig
BuildConfig.DEBUG 首先在Gradle脚本中默认的debug和release两种模式BuildCondig.DEBUG字段分别为true和false,而且不可更改.该字段编译后自动生成 ...
- Python: Catch multiple exceptions in one line (except block)
Enclose in parentheses: except (IDontLIkeYouException, YouAreBeingMeanException) as e: pass Separati ...
- Linux64位服务器编译安装MySQL5.6(CentOS6.4)
首先到MySQL官网下载MySQL最新版(目前是mysql-5.6.12)上传到服务器上,下面说一下详细的安装过程. 安装依赖包,可以在线更新也可以配置本地源(CentOS本地源配置)yum -y i ...
- httpwebrequest 服务器提交了协议冲突. section=responsestatusline
调用接口的时候,包: httpwebrequest 服务器提交了协议冲突. section=responsestatusline 解决方案: req.KeepAlive = false; req.Al ...
- Cubieboard2裸机开发之(三)C语言操作LED
前言 前面通过汇编语言点亮LED,代码虽然简单,但并不是很直观.这次使用熟悉的C语言来控制LED,但是需要注意的地方有两点,第一,要想使用C语言,首先需要在调用C语言代码之前设置好堆栈:第二,调用C语 ...