您现在的位置是:首页 > cms教程 > Discuz教程Discuz教程
Discuz的NT控件剖析TextBox
春翠2025-06-28Discuz教程已有人查阅
导读继上篇文章之后大家给了不少的反馈,其中有肯定也有否定的,必定程序设计有很多个性化的东西,因此就会有不同的意见产生。
继上篇文章之后大家给了不少的反馈,其中有肯定也有否定的,必定程序设计有很多个性化的东西,因此就会有不同的意见产生。我会从中找出合理化的意见并纠正以往认识和设计思路上的错误。希望大
家能一如既往的支持我们的这个开源项目。好了,开始今天的话题,今天就说一下 TextBox 控件。
先贴一张运行效果图让大家看一下:
开发动机:早在上一家公司时,就有了这个控件的开发想法并设计了一个简单的“原型”。在加入Discuz之后,因为要在后台管理设计用使用客户端JS校验,因此就在原有的代码基本上进行了相应
的扩充,添加了如正规订制,较大长度限制等功能。当前的这个代码是1.0版本中的源码。
其实看过我们这个代码的人应该很容易看出这个控件是采用控件复合方式完成的。里面的几个控
件定义如下:
它们绑定的函数就是SetValiateControls(),现说明如下:
校验时有效。而Text属性中的日期格式强制转换主要为了避免不同语言操作系统,数据库日期格式不同才这样操作的。
存在的问题:firefox 下的校验js无法使用。
程序逻辑结构还有待优化。
选项中出现中文,数据校验,电子邮箱等(以后会采用英文)
如果ie下 js 无法使用可运行“开始” - “运行” -- 输入“cmd” 然后执行
C:/windows/Microsoft.Net/Framework/v1.1.4322/aspnet_regiis -c 即可
家能一如既往的支持我们的这个开源项目。好了,开始今天的话题,今天就说一下 TextBox 控件。
先贴一张运行效果图让大家看一下:
开发动机:早在上一家公司时,就有了这个控件的开发想法并设计了一个简单的“原型”。在加入Discuz之后,因为要在后台管理设计用使用客户端JS校验,因此就在原有的代码基本上进行了相应
的扩充,添加了如正规订制,较大长度限制等功能。当前的这个代码是1.0版本中的源码。
其实看过我们这个代码的人应该很容易看出这个控件是采用控件复合方式完成的。里面的几个控
件定义如下:
System.Web.UI.WebControls.TextBox tb=new System.Web.UI.WebControls.TextBox();
System.Web.UI.WebControls.RequiredFieldValidator RequiredFieldValidator1=new RequiredFieldValidator();
System.Web.UI.WebControls.RegularExpressionValidator RegularExpressionValidator1=new RegularExpressionValidator();
System.Web.UI.WebControls.RangeValidator rangevalidator=new System.Web.UI.WebControls.RangeValidator();
其中的tb就是这个控件的主角,客户端所呈现的文件框就是它, RequiredFieldValidator1用户是否强制输入内容的控件(与tb进行绑定),而RegularExpressionValidator1则是将系统正则式或用户定制的正则式进行初始化并与tb进行绑定和控制的控件。rangevalidator则是进行范围限制的控件。它们绑定的函数就是SetValiateControls(),现说明如下:
1SetValiateControls()
2{
3
4 this.Controls.Add(tb); 向自定控件中加入tb(TextBox)控件
5
6 //当有要进行正则校验的设置时
7 if((RequiredFieldType!=null)&&(RequiredFieldType!="")&&(RequiredFieldType!="暂无校验"))
8 {
9 //设置显示信息方式为 "Dynamic"
10 RegularExpressionValidator1.Display=System.Web.UI.WebControls.ValidatorDisplay.Dynamic;
11 //将textbox与RegularExpressionValidator1校验控件相绑定
12 RegularExpressionValidator1.ControlToValidate=tb.ID;
13 //根据校验类型加载相应的正则式
14 switch (RequiredFieldType)
15 {
16 case "数据校验":
17 {
18 //如有用户定制的正则式则使用,如没有则使用系统自带的正则式
19 RegularExpressionValidator1.ValidationExpression=(this.ValidationExpression!=null)?
20 this.ValidationExpression:"^[-]?\\d+[.]?\\d*$";
21 //绑定错误信息
22 RegularExpressionValidator1.ErrorMessage="数字的格式不正确";break;
23 }
24
25
26 //是否可以不输入内容的判断
27 switch (CanBeNull)
28 {
29 case "可为空": { break; }
30 case "必填":
31 {
32 //当必填时则进行RequiredFieldValidator1的设置和tb的绑定
33 RequiredFieldValidator1.Display=System.Web.UI.WebControls.ValidatorDisplay.Dynamic;
34 RequiredFieldValidator1.ControlToValidate=tb.ID;
35 RequiredFieldValidator1.ErrorMessage="<font color=red>请务必输入内容!</font>";
36 this.Controls.Add(RequiredFieldValidator1);
37 break;
38 }
39 default : { break; }
40 }
41
42 }
下面依次说明其它主要属性和功能:
1SetFocusButtonID属性用户当用户在tb控件中输入回车符时相应获得焦点的控件ID(一般是“提交”按钮的ID值),
2相关代码如下:
3 [Bindable(true),Category("Appearance"),DefaultValue("")]
4 public string SetFocusButtonID
5 {
6 get
7 {
8 object o = ViewState[this.ClientID+"_SetFocusButtonID"];
9 return (o==null)?"":o.ToString();
10 }
11 set
12 {
13 ViewState[this.ClientID+"_SetFocusButtonID"] = value;
14 if(value!="")
15 {
16 tb.Attributes.Add("onkeydown","if(event.keyCode==13){
17 document.getElementById('"+value+"').focus();}");
18 }
19 }
20 }
21
22
23 //为tb控件设置内容较大长度属性,注当为多行“MultiLink”(即:textarea)时,会使用JS得到获取该属性进行长度的检查
24 [Bindable(true),Category("Appearance"),DefaultValue("")]
25 public int MaxLength
26 {
27 get
28 {
29 object o =ViewState["TextBox_MaxLength"];
30 if(o!=null)
31 {
32 int maxlength= Convert.ToInt32(o.ToString());
33 AddAttributes("maxlength",maxlength.ToString());
34 return maxlength;
35 }
36 else
37 {
38 return -1;
39 }
40 }
41 set
42 {
43 ViewState["TextBox_MaxLength"] = value;
44 AddAttributes("maxlength",value.ToString());
45 }
46 }
47
48
49 //控件的TextMode属性,用于定制显示模式为“密码,单行或多行”
50 [Bindable(false),Category("Behavior"),DefaultValue(""),TypeConverter(
51 typeof(TextModeFieldTypeControlsConverter)),Description("要滚动的对象。")]
52 public string TextMode
53 {
54 get
55 {
56 return tb.TextMode.ToString();
57 }
58 set
59 {
60 if (value=="Password") tb.TextMode =TextBoxMode.Password;
61 if (value=="MultiLine")
62 {
63 tb.TextMode =TextBoxMode.MultiLine;
64 tb.Attributes.Add("onkeyup","return isMaxLen(this)");
65 }
66 if (value=="SingleLine") tb.TextMode =TextBoxMode.SingleLine;
67 }
68 }
69
70 //设置校验类型, 并初始化控件绑定
71 [Bindable(false),Category("Behavior"),DefaultValue(""),TypeConverter(typeof(
72 RequiredFieldTypeControlsConverter)),Description("要滚动的对象。")]
73 public string RequiredFieldType //要进行校验的表达式
74 {
75 get
76 {
77 object o = ViewState["RequiredFieldType"];
78 return (o==null)?"":o.ToString();
79 }
80 set
81 {
82 ViewState["RequiredFieldType"] = value;
83 //初始化控件绑定,此处代码调用先后逻辑还存在一些问题,已在2.0版本做相应修正。
84 SetValiateControls();
85 }
86 }
87
88 .
89
90
91 //采用下拉框显示方式来显示校验类型,如图:
92 public class RequiredFieldTypeControlsConverter:StringConverter
93 {
94 public RequiredFieldTypeControlsConverter() {}
95
96 public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
97 {
98 return true;
99 }
100
101 public override System.ComponentModel.TypeConverter.StandardValuesCollection GetStandardValues(
102 ITypeDescriptorContext context)
103 {
104 ArrayList controlsArray = new ArrayList();
105 controlsArray.Add("暂无校验");
106 controlsArray.Add("数据校验");
107 controlsArray.Add("电子邮箱");
108 controlsArray.Add("移动手机");
109 controlsArray.Add("家用电话");
110 controlsArray.Add("身份证号码");
111 controlsArray.Add("网页地址");
112 controlsArray.Add("日期");
113 controlsArray.Add("日期时间");
114 controlsArray.Add("金额");
115 controlsArray.Add("IP地址");
116 controlsArray.Add("IP地址带端口");
117 return new StandardValuesCollection(controlsArray);
118 }
119
120 public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
121 {
122 return false;
123 }
124 }
这样就完成了这个控件的主干部分,而其它的一些属性,如MaximumValue(较大值),MinimumValue(小值)仅在进行数据校验时有效。而Text属性中的日期格式强制转换主要为了避免不同语言操作系统,数据库日期格式不同才这样操作的。
存在的问题:firefox 下的校验js无法使用。
程序逻辑结构还有待优化。
选项中出现中文,数据校验,电子邮箱等(以后会采用英文)
如果ie下 js 无法使用可运行“开始” - “运行” -- 输入“cmd” 然后执行
C:/windows/Microsoft.Net/Framework/v1.1.4322/aspnet_regiis -c 即可
本文标签:
很赞哦! ()
上一篇:如何一键安装Discuz Q
下一篇:discuz插件制作方法步骤流程
相关教程
- Fluent M3U8
- PHP html_entity_decode()函数:HTML实体还原字符教程
- PHP htmlentities()函数:字符转HTML实体教程
- PHP fprintf()函数:格式化字符串写入流指南
- PHP count_chars()函数:字符频率统计与模式选择
- PHP array_uintersect_uassoc函数详解:键与值双重自定义回调的交集运算
- PHP array_uintersect函数详解:自定义回调驱动的多数组值交集运算
- PHP array_uintersect_assoc函数详解:带键名校验的自定义交集运算
- PHP sizeof()函数教程:数组元素计数、count()别名关系与递归统计实战
- PHP pos()函数:current()的别名,读取数组当前指针元素
- Bento Grid Generator
- Cover Paint
图文教程
小白安装Discuz开源论坛手把手教
添加mysql普通用户接着上篇的lamp这篇安装Discuz配置虚拟主机1、打开虚拟主机配置2、配置虚拟主机3、创建DocumentRoot路径
Discuz论坛注册过程和账号设置基本用法介绍
在discuz论坛上注册和设置账号的步骤如下:1.访问论坛主页,点击注册按钮。2.填写注册表单,包括用户名、密码和邮箱地址。3.完成注册后,登录账号。
discuz! x2.5代码执行流程介绍
以dz根目录门户请求入口文件portal.php为例,浅析其执行流程。我们以portal.php为例,用户请求 http://xxx.xxx.xx/portal.php
Discuz的编码规范介绍
本规范由编程原则组成,融合并提炼了开发人员长时间积累下来的成熟经验,意在帮助形成良好一致的编程风格。适用范围如无特殊说明,以下规则要求完全适用于Discuz!项目,同时也可
相关源码
-
帝国cms大气淘宝客网站源码带手机版带火车头采集本款创意礼物导购网站模板为礼物类电商平台设计,采用清爽简约的界面风格,具备完善的商品导购功能。系统支持在文章攻略中灵活插入商品购买链接,实现内容与电商的结合。查看源码 -
(PC+WAP)货物运输快递物流汽车贸易pbootcms模板下载为货运代理、汽车贸易及快递企业设计的全终端适配网站系统,整合运单追踪与车辆展示核心功能模块原生开发的DIV+CSS架构,支持WebP图像压缩技术。查看源码 -
(自适应)品牌策划网络设计作品公司个人pbootcms网站源码下载本款基于PbootCMS开发的网站模板专为品牌策划、设计公司打造,特别适合展示创意作品、设计案例和企业服务。模板采用现代化设计风格查看源码 -
(自适应)帝国cms7.5模板新闻资讯门户带会员中心基于帝国CMS7.5内核开发的HTML5响应式模板,为新闻机构、媒体门户及资讯聚合平台设计。通过模块化布局实现图文混排查看源码 -
(自适应响应式)蓝色勘察设计院机构单位商会协会pbootcms模板下载本模板基于PbootCMS系统开发,为勘察设计院所、工程咨询单位设计,特别适合展示设计成果、技术服务和项目案例。采用响应式技术,确保设计图纸和方案以及文案在不同设备上都能清晰展示。查看源码 -
(自适应响应式)绿色环保材料设备科技类营销型网站pbootcms源码下载本模板基于PbootCMS开发,主要面向环保设备、环保材料及相关科技企业。采用HTML5+CSS3技术构建,具备响应式特性,确保在各类设备上均有良好展示效果。查看源码
| 分享笔记 (共有 篇笔记) |
