多字段表单自动化

最近项目中一个表单的字段就有30多个,增加功能要把页面控件的值赋给实体,再把实体保存到数据库;修改功能又要把数据从库读取出来给了实体后,再给页面的控件赋值,由于字段太多,这个赋值过程真是痛苦。经过变通搞了个自动赋值。

以下是把表单控件传送的参数转化为实体:NameValueCollection form可以是Request.Form 或者Request.QueryString等。 实体字体是nullAble类型也没有问题


 1         public static T NameValue2Entity<T>(NameValueCollection form) where T:new()
 2         {
 3             string[] keys = form.AllKeys;
 4             T data = new T();
 5             try
 6             {
 7                 Type type = data.GetType();
 8                 for (int i = 0; i < keys.Length; i++)
 9                 {
10                     string value = form[i].ToString();
11                     if (String.IsNullOrEmpty(value))
12                     {
13                         continue;
14                     }
15                     PropertyInfo proper = type.GetProperty(keys[i]);
16                     if (proper != null)
17                     {
18                         if (form[i]!=null)
19                         {
20                             proper.SetValue(data, ChangeType(form[i], proper.PropertyType), null); 
21                         }
22                     }
23                 }
24                 return data;
25             }
26             catch (Exception ex)
27             {
28                 AppBase.loger.LogerManger.Error("NameValue2Entity出错了",ex);
29             }
30             return default(T);
31         }
32 
33         public static object ChangeType(object value, Type t)
34         {
35             System.ComponentModel.TypeConverter tc = TypeDescriptor.GetConverter(t);
36             return tc.ConvertFrom(value);
37         }

 

 

 

以下是把实体转化为javascript为页面表单控件赋值(需要jquery) 

 

ExpandedBlockStart.gif代码
public static string SetValueToClient<T>(T data)where T:class
        {
            StringBuilder sb 
= new StringBuilder("<script>");
            
//sb.Append("$(document).ready(function(){");
            Type type = data.GetType();
            PropertyInfo[] propers 
= type.GetProperties();
            
foreach (PropertyInfo proper in propers)
            {
                
string key = proper.Name;
                
string value = proper.GetValue(data, null)!=null?proper.GetValue(data, null).ToString():"";
                
if (IsDateString(value))
                {
                    DateTime dt 
= DateTime.Parse(value);
                    value 
= dt.ToString("yyyy-MM-dd");
                }
                
if (!String.IsNullOrEmpty(value))
                {
                    
string item = String.Format("$('#{0}').val('{1}');", key, value);
                    sb.Append(item);
                }
            }
            
//sb.Append("})");
            sb.Append("</script>");
            
return sb.ToString();
        }

 

 

 

 

转载于:https://www.cnblogs.com/luckuny/archive/2011/01/05/1926914.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值