最近项目中一个表单的字段就有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 }
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)


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();
}
{
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();
}