关于Controller下Request取值的问题(.net mvc)

每次我们都通过Request[]取值去和当前实体赋值,很麻烦很烦琐..   
写了一个公共的函数来取代这一功能,给大家探讨一下.... 

  
主要是通过反射来完成一个自动创建对象,赋值的的过程 
具体代码如下是   

  1.  /// <summary>
  2.         /// 利用反射对传过来的类型创建实例,且对实例复制
  3.         /// </summary>
  4.         /// <typeparam name="T"></typeparam>
  5.         /// <returns></returns>
  6.         protected T InvokeGetFromRequest<T>()
  7.         {
  8.             Type type = typeof(T);
  9.             object o = Activator.CreateInstance(type);
  10.             PropertyInfo[] propertyInfos = type.GetProperties();
  11.             string[] allKeys = Request.Params.AllKeys.Where(k => propertyInfos.Select(p => p.Name).ToArray<string>().Contains(k)).ToArray();
  12.             foreach (string s in allKeys)
  13.             {
  14.                 TypeForInvoke(propertyInfos.Where(p => p.Name == s).FirstOrDefault(), s, o);
  15.             }
  16.             return (T)o;
  17.         }
  18.         /// <summary>
  19.         /// 对类型进行判断,这样就可以
  20.         /// </summary>
  21.         /// <param name="propertyInfo"></param>
  22.         /// <param name="key"></param>
  23.         /// <param name="o"></param>
  24.         private void TypeForInvoke(PropertyInfo propertyInfo,string key,object o)
  25.         {
  26.             if (propertyInfo == null)
  27.                 return;
  28.             string str = propertyInfo.PropertyType.FullName;
  29.             if (str.Contains("System.Decimal"))
  30.             {
  31.                 propertyInfo.SetValue(o, BillsUntily.GetDecimalTime(Request[key]), null);
  32.             }
  33.             else if (str.Contains("System.Int"))
  34.             {
  35.                 propertyInfo.SetValue(o, BillsUntily.GetInt(Request[key]), null);
  36.             }
  37.             else if (str.Contains("System.DateTime"))
  38.             {
  39.                 propertyInfo.SetValue(o, BillsUntily.GetDateTime(Request[key],propertyInfo), null);
  40.             }
  41.             else if (str.Contains("System.Double"))
  42.             {
  43.                 propertyInfo.SetValue(o, BillsUntily.GetDoubleTime(Request[key]), null);
  44.             }
  45.             else
  46.             {
  47.                 propertyInfo.SetValue(o, Request[key], null);
  48.             }
  49.         }

-------------------------------------------------------------  
可以通过   
User user = this.InvokeGetFromRequest<User>();  
直接调用,这个实体已经被创建好,且已经赋值...

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值