利用反射,泛型,静态方法快速获取表单值到Model

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

1
2
3
4
5
6
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"]);

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public static class HenqPost<T> where T: new()   
{   
    /**//// <summary>   
    /// 为Model赋值   
    /// </summary>   
    /// <typeparam name="T">Model</typeparam>   
    /// <param name="t">model</param>   
    /// <param name="form">Request</param>   
    /// <returns></returns>   
    public static int GetPost<T>(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。
以后所有的表单都可以很简单的处理了,两行代码搞定。

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

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

posted on   cestarme  阅读(687)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
< 2011年6月 >
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 1 2
3 4 5 6 7 8 9

统计

点击右上角即可分享
微信分享提示