我们在使用MVC的时候,给model赋值只需要 TryUpdateModel(model) 就搞定了,而在webForm,winForm中,我们要写长长的 xx.xx = Convert.Toint( xxx.text) ...如果一个model有30个属性,就要写30行,看着都累!
这里有一篇 webForm 的文章:http://www.cnblogs.com/coolcode/archive/2009/08/15/1546936.html 借用了一下~
那winForm能否也借用呢?
我尝试写了一个扩展类(只实现了int,string,datetime类型,其它的可以扩展)
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
32
33
34
35
36
37
38
39
40
|
public
class
Expand : Form
{
public
void
TryUpdateModel<TModel>(
ref
TModel model)
{
Type mod = model.GetType();
PropertyInfo[] property = mod.GetProperties();
object
obj = Activator.CreateInstance(mod);
foreach
(PropertyInfo pi
in
property)
{
if
(Controls.ContainsKey(pi.Name))
{
if
(pi.PropertyType ==
typeof
(DateTime))
{
try
{
pi.SetValue(obj, ((DateTimePicker)Controls[pi.Name]).Value,
null
);
}
catch
{ }
}
else
if
(pi.PropertyType ==
typeof
(
int
))
{
try
{
pi.SetValue(obj,
int
.Parse(Controls[pi.Name].Text),
null
);
}
catch
{ }
}
else
{
try
{
pi.SetValue(obj, Controls[pi.Name].Text,
null
);
}
catch
{ }
}
}
}
model = (TModel)obj;
}
}
|
然后,我们就可以
1
2
3
|
var
model =
new
Class1();
this
.TryUpdateModel<Class1>(
ref
model);
|
不过,看着ref那么碍眼呢?
不知道各位大神 ~ 有没有更好点的办法