用动态控件模拟复合控件(一)2011-12-06 博客园 阿牛动态控件,复合控件,相信大家都已经很熟悉了。只要达到同样的展示及功能,用什么样的方式实现应该取决于实际情况。我在一个项目中遇到的情况是:已经有了很多页面,但每个页面都没有用Validation控件来验证输入的有效性。为了达到相同的展示效果:常规办法:是为每个页面的每个TextBox有选择的生成RequiredFieldValidator、RangeValidator、CompareValidator、RegularExpressionValidator、FilteredTextBoxExtender。但这个方法,需要每个页面都去添加,并且统一调整起效果来,工作量太大。复合控件:是写一个复合控件,依参数来添加验证控件。这个也需要在页面中统一添加一次(工作量约为第一个办法的1/3),还需要更改一下后台的控件类型声明(我的后台代码在另一个程序集中)。动态控件:写了个直接继承自TextBox的控件,在适当的地方,依参数来添加验证控件。这个也需要在页面中统一改动一下(工作量和复合控件的方法相当),不过,后台的代码不用做发改动。前两种,大家不陌生,我就不啰嗦了。这里,只说一下用动态控件实现上面功能的方法。先展望一下使用方法:<!-- 必须输入 -->
<facade:StringTextBox Options="required" HelpMessage="请输入用户名" DisplayName="用户名" 
runat="server" ID="StringTextBox1" MaxLength = "30" /><br />
<!-- 必须输入,只能输入数字 -->
<facade:StringTextBox Options="required,Filtered" HelpMessage="请输入用户名" 
FilterType="Numbers" DisplayName="用户名" runat="server" ID="StringTextBox2" MaxLength = "30" /><br />
<!-- 必须输入,只能输入数字,数值范围是0-400 -->
<facade:NumberTextBox runat="server" ID = "tbCount" MinValue="0" MaxValue="400" DisplayName="数量" 
HelpMessage="请输入数量" />
<!-- 必须输入,只能输入数字,数值范围是0-400 -->
<facade:MoneyTextBox runat="server" ID = "NumberTextBox1" MinValue="0" MaxValue="400" 
DisplayName="金额" HelpMessage="请输入金额" />
<!-- 必须输入,输入的字符串必须以ABC开头 -->
<facade:RegexTextBox runat="server" Options="Required" ValidationExpression="^abc.+$" 
ID="tbRegex" DisplayName="正则测试" MaxLength="120" Example="abc123,abceee" HelpMessage="请输入正则测试" />
<!-- 输入的必须是手机号 -->
<facade:PhoneTextBox runat="server" ID="tbMobile" PhoneTypes="Mobile" DisplayName="手机号" 
MaxLength="20" Example="13988888888" HelpMessage="请输入手机号" />
<!-- 输入的必须是手机号,或者电话 -->
<facade:PhoneTextBox runat="server" ID="tbPhoneMobile" PhoneTypes="Phone,Mobile" DisplayName="手机号"
MaxLength="20" Example="13988888888,0311-88886666" HelpMessage="请输入手机号" />