将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 ...
随机推荐
- Revit中如何控制图元的显示与隐藏
Revit建模过程中经常会遇到图元的相互遮挡的情况,为了将一些图元显示出来,就需要将一些不需要显示的图元隐藏掉,这就需要用到"隐藏/重置"工具,在Revit绘图窗口左下角提供了一排 ...
- Oracle Redo Log 机制 小结(转载)
Oracle 的Redo 机制DB的一个重要机制,理解这个机制对DBA来说也是非常重要,之前的Blog里也林林散散的写了一些,前些日子看老白日记里也有说明,所以结合老白日记里的内容,对oracle 的 ...
- [C] zlstdint(让VC、TC等编译器自动兼容C99的整数类型)V1.0。支持Turbo C++ 3等DOS下的编译器
作者:zyl910 以前我曾为了让VC++等编译器支持C99的整数类型,便编写了c99int库来智能处理(http://www.cnblogs.com/zyl910/p/c99int_v102.htm ...
- 成功在神舟K650c-i7 d2(i7-4700MQ、HM87)上装好了Windows XP
成功在神舟K650c-i7 d2(i7-4700MQ.HM87)上装好了Windows XP 本来已经在K650c上装好了Windows7.Windows8双系统,奈何某些旧软件只能在Windows ...
- 关于ORACLE的重启命令
有时候数据死了,或者没有监听,不必重启机子,重启一下数据库服务行了,下面是linux下的启动步骤,没有在win下执行过,可能也可以!以oracle9i为例(1) 以oracle身份登录数据库,命令:s ...
- Oracle Essbase入门系列(一)
1. 开篇序 本文是几年前做Hyperion Planning项目时写的,后来陆陆续续有些补充.本来打算将整个EPM写一系列的教程,但HFM写到1/3就没动力了.不过至少Essbase这部分是完整的. ...
- AWVS漏洞测试-03节-添加扫描项目
http://localhost:9660 我们要扫描这个页面 点击左上角的New Scan,在Scan Single哪里输入要扫描的网站地址,可以是本地地址 然后选择下一步 Next 这里我们可以配 ...
- ISO/IEC 9899 C语言标准(非官方翻译)
本系列博文将以ISO/IEC 9899最新的官方手册为准,然后再添加GCC以及Clang编译器对标准的扩展. 本系列博文将不仅仅是针对C编程语言(C Programming Language)标准的翻 ...
- Intellij IDEA 14的注册机
将以下代码保存成keygen.java import java.math.BigInteger; import java.util.Date; import java.util.Random; imp ...
- linux 文件夹说明,用户添加删除,不熟悉的命令
一.Linux 根目录下的文件夹说明 usr 程序默认安装路径,相当于windows的 program 附显示当前所处位置:pwd 二.用户 用户添加:useradd 用户名 passwd 用户名 u ...