在编写WebForm或WinForm程序时,我们经常需要编写很多获取,设置UI控件值代码.这确实 是一件重复,麻烦而又容易出错的工作.所以我们应该将这个工作交给计算机去做解放我们的 劳动力.一般来说UI上的控件都是和我们的EntityObject相对应的,所以利用反射将 EntityObject中属性值赋给控件或通过控件填充EntityObject是非常方便的.但是要想让计算 机自动干活就要顶一个规则,就是控件ID = 前缀 + 属性名.比如我们有一个User类其定义如 下:
class User
{
string _name;
string _pwd;
public string Name
{
get { return this._name; }
set { this._name = value;}
}
public string Pwd
{
get { return this._pwd; }
set { this._pwd = value; }
}
};
而我们要写一个登录界面,那我们就会有txtName和txtPwd两个文本框来 接受输入(我习惯用三个字母缩写来做前缀),这样反射才能派上用场.RoR有条编程理念叫 ”约定由于配置”,我很同意,这可以使我们减少很多无意义的工作.
//控 件类型枚举,一些常用的WinForm和WebForm控件
public enum CtlType
{
TextBox,
DropDownList,
ComboBox,
Hidden,
CheckBox,
}
//值对象和控件根据名字 相互映射
public class ControlHelper
{
//id名称前缀 表
public static readonly string[] PreFix_Table = new string[5];
static ControlHelper()
{
PreFix_Table [(int)CtlType.TextBox] = "txt";
PreFix_Table [(int)CtlType.DropDownList] = "drp";
PreFix_Table [(int)CtlType.ComboBox] = "cmb";
PreFix_Table [(int)CtlType.Hidden] = "hdn";
PreFix_Table [(int)CtlType.CheckBox] = "chk";
}
//解析控件名
private static string ParseCtlID(string id, CtlType ctlType)
{
return id.Replace(PreFix_Table[(int)ctlType], "");
}
}