在项目中经常需要处理表单,给model赋值,很烦人的一些重复代码。如下边的代码:

News news = new News();
news.Id = int.Parse(Request.Form["Id"]);
news.Category = int.Parse(Request.Form["Category"]);
news.Title = Request.Form["Title"]; news.CreateTime = DateTime.Parse(Request.Form["CreateTime"]);

经常还会出现写错情况,尤其是加班写这种无聊代码的时候... 
使用反射,泛型,静态方法可以很容易解决这个问题。说的好像有点高深,其实超级简单。见代码。

public static class HenqPost where T: new()
{
/**////
/// 为Model赋值
///
/// Model
/// model
/// Request
///
public static int GetPost(ref T t, NameValueCollection form)
{
int va=0;
Type type = t.GetType();//获取类型
PropertyInfo[] pi=type.GetProperties();//获取属性集合
foreach( PropertyInfo p in pi )
{
if (form[p.Name] != null)
{
try
{
p.SetValue(t, Convert.ChangeType(form[p.Name], p.PropertyType), null);//为属性赋值,并转换键值的类型为该属性的类型
va++;//记录赋值成功的属性数
}
catch
{
}
}
}
return va;
}
}

只所以用静态方法,主要是图方便,不用new。 
以后所有的表单都可以很简单的处理了,两行代码搞定。

News news = new News();
HenqPost.GetPost(ref news, Request.Form);
//烦人的为实体类赋值就Over了。

不需要任何配置,约定是最好的配置。 
约定:表单项的名称最好和实体类的属性名字对应(如果你要不一样,反射方法根据自己的规则改造下)。 
为表单赋值,如果是webform的话也可以采取这种方式,可以自己写下,原理差不多。

REFERENCE FROM : http://blog.csdn.net/cestarme/article/details/6545529

利用反射,泛型,静态方法快速获取表单值到Model的更多相关文章

  1. MS SQLSERVER中如何快速获取表的记录总数

    在数据库应用的设计中,我们往往会需要获取某些表的记录总数,用于判断表的记录总数是否过大,是否需要备份数据等.我们通常的做法是:select count(*) as c from tableA .然而对 ...

  2. javascript获取表单值的7种方式

    见代码: <!doctype html> <html lang="en"> <head> <meta charset="UTF- ...

  3. jq获取表单值与赋值代码

    jq获取表单值与赋值代码 jq获取表单值与赋值代码 $("#keyword")[0].value = ""; /*获得TEXT.AREATEXT的值*/ var ...

  4. 快速获取表单多条数据,使用ajax传递给后台

    当表单中有多条数据需要向后台传递时,一个一个的获取显然是不可取的办法,可以借助表单的serialize()方法获取. HTML: <form id="form"> &l ...

  5. jq扩展获取表单值、设置值

    不多说,直接上代码 //jq添加插件 (function (window, $) { $.fn.serializeJson = function () { var serializeObj = {}; ...

  6. jsp 获取表单值, 提交类型为multipart/form-data处理

    //tt.jsp<script type="text/javascript"> function doSubmit(){ alert("aaaaaa" ...

  7. java 利用反射调用静态方法的示例

    内容简介 主要介绍使用反射的机制来调用执行类中的静态方法. 静态方法 public class GisUtil { private final static Logger logger = Logge ...

  8. Jquery 获取表单值如input,select等方法

    1 if($("input[name=item][value='val']").attr('checked')==true) //判断是否已经打勾 name即控件name属性,va ...

  9. 利用反射把数据库查询到的数据转换成Model、List(改良版)

    之前也写过一篇这样的博文,但是非常的粗糙.    博文地址 后来看到了一位前辈(@勤快的小熊)对我的博文的评论后,让我看到了更加优雅的实现方式,于是重构了之前的代码. public static Li ...

随机推荐

  1. MMORPG大型游戏设计与开发(part3 of net)

    这一部分需要向大家介绍的是服务器的select以及收发包的具体流程,从核心代码功能上分析网络交互具体过程. 首先大家要看第二部分(part2 of net)的代码结构图,因为在接下来的流程过程中会用到 ...

  2. C++ 之 策略模式

    1  会飞的鸭子 Duck 基类,包含两个成员函数 swim() 和 display():派生类 MallardDuck,RedheadDuck 和 RubberDuck,各自重写 display() ...

  3. sql中in和exists效率问题 转自百度知道

    in和existsin 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询. 如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询 ...

  4. Codeforces Round #371 (Div. 2)E. Sonya and Problem Wihtout a Legend[DP 离散化 LIS相关]

    E. Sonya and Problem Wihtout a Legend time limit per test 5 seconds memory limit per test 256 megaby ...

  5. VS设置程序集属性(文件的详细信息)

    适用范围 本文方法适用于:C#创建的控制台程序,WinForm,WPF等VS创建的.Net工程信息设置. 方法步骤 1.在 项目 上点击鼠标右键选择 属性 ,进入这个页面,点击 程序集信息(重点关注 ...

  6. pitch yaw roll 的区别

    http://blog.163.com/vipwdp@126/blog/static/150224366201281935518196/

  7. 在嵌入式开发板中运行程序提示-/bin/sh: ./xx: not found的解决办法

    今天拿着我的tiny6410板子,在虚拟机上用 $arm-linux-gcc he.c -o he 编译后放到tiny6410的文件系统中提示 -/bin/sh: ./xx: not found 后来 ...

  8. [No00004D]深度思考好文:软件工程师的困境

    昨天是我一同学结婚的好日子,同学们大家聊各自的工作,有个同学突然问了我一句:我们同学中好像做软件的不多?如果再细分,好像做网络相关的更少? 回想起当时为何读计算机信息管理的专业,是因为那时听说读电脑未 ...

  9. 0e开头md5汇总

    PHP在处理哈希字符串时,会利用"!="或"=="来对哈希值进行比较,它把每一个以"0E"开头的哈希值都解释为0,所以如果两个不同的密码经过 ...

  10. uva10160 Servicing Stations

    The input consists of more than one description of town (but totally, less than ten descriptions). E ...