使用反射自动生成 WebForms (1)






1.67/5 (9投票s)
2005年6月16日

31054
描述了如何使用反射从类生成 WebForm。
引言
这是关于 Web Forms 代码生成的一系列文章的第一篇。
这个想法很简单。对于以下类
enum ArticleRating
{
Bad, Good, Excelent
}
class Feedback
{
public string Name;
public string Email;
public string Comments;
public ArticleRating Rating;
}
我们希望生成以下 Web Form
<TABLE><TBODY>
<TR><TD>Name:</TD><TD><INPUT id="name"></TD></TR>
<TR><TD>Email:</TD><TD><INPUT id="email"></TD></TR>
<TR><TD>Comments:</TD><TD><input id="comments"></input></TD></TR>
<TR><TD>Ratings:</TD><TD><SELECT id="ratings">
<OPTION selected value="0">Bad</OPTION>
<OPTION value="1">Good</OPTION>
<OPTION value="2">Excellent</OPTION>
</SELECT>
</TD>
</TR>
</TBODY></TABLE>
我们该怎么做呢?
有两种方法可以做到
- 使用序列化,您可以序列化这个类并使用 XSLT 进行格式化,或者直接操作生成的 DOM。
- 使用反射,来探索类成员并推断要生成的控件类型。
我更喜欢使用反射,因为我可以增加它的灵活性。例如
[FormControl(Type="RadioGroup")]
enum ArticleRating { Bad, Good, Excelent }
[Form(Submit="OK",Clear="Clear",Action="dofeedback.aspx")]
class Feedback
{
public string Name;
public string Email;
[FormControl(Type="TextArea",
Caption="Please Write Your Comments",
CaptionPosition="Over")]
public string Comments;
public ArticleRating Rating;
}
这将生成以下表单
<TABLE><TBODY>
<TR><TD>Name:</TD><TD><INPUT id="name"></TD></TR>
<TR><TD>Email:</TD><TD><INPUT id="email"></TD></TR>
<TR><TD colspan="2">Please Write Your Comments:</TD></TR>
<TD><textarea id="comments"></textarea></TD></TR>
<TR><TD>Ratings:</TD><TD>
<input type="radio" value="0">Bad</input>
<input type="radio" value="0">Good</input>
<input type="radio" value="0">Excelent</input>
</TD>
</TR>
</TBODY></TABLE>
这就是这个想法....
请阅读这系列文章的第二部分。