十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
小编给大家分享一下如何使用AJAX扩展器自定义控件,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:主机域名、虚拟主机、营销软件、网站建设、天全网站维护、网站推广。
掩码编辑功能的必要性
在 HTML 中,接受输入数据的唯一方式是使用 标记。在 ASP.NET 中,只是使用 TextBox 控件对输入标记进行了封装。此控件存在的一个问题是:它并不限制用户可以在其中键入的内容。但是,通过使用少量的 JavaScript 代码,您可以筛选掉不需要的文本。这就是上个月所介绍的内容。这个月我将添加掩码编辑功能,该功能允许在键入字符时对其进行筛选,并允许字符以区域特定格式显示。掩码编辑功能可用于筛选、验证、自动设置格式和本地化。还可将该功能应用于许多真实数据类型,包括日期、货币、时间、邮政编码、电话号码、社会保险号码或增值税 ID 等。在 AJAX 控件工具包中,MaskedEdit 扩展器是一个免费组件,将其附加到 TextBox 控件后,您便可以对许多常见情况下的输入行为进行控制。
MaskedEdit 扩展器
在 AJAX 控件工具包中,MaskedEdit 扩展器支持 MaskEditType 枚举类型所指定的某些数据格式:2008年度***技术图书与原创作者评选颁奖典礼
public enum MaskedEditType { None, Date, Number, Time, DateTime } |
您可以使用该扩展器输入数字、日期、时间和日期/时间。扩展器根据给定的区域性设置来决定输出格式。以下代码段显示了对接受日期输入的文本框使用 MaskedEdit 扩展器的典型方式:
<asp:TextBox runat="server" ID="TextBox1" /> <act:MaskedEditExtender ID="MaskedEditExtender1" runat="server" TargetControlID="TextBox1" Mask="99/99/9999" MaskType="Date" /> |
图 A 所列。主要通过两个属性来定义输入掩码:Mask 和 MaskType。Mask 的默认值为 "",用于指定扩展器可接受的字符的掩码。MaskType 的默认值为 "",用于使用 MaskedEditType 枚举所定义的任意值来指示掩码类型。
FigureAMaskedEdit 扩展器属性
属性 | 默认值 | 说明 |
AcceptAMPM | False | 一个布尔属性,用于指示是否应使用 AM/PM符号。 |
AcceptNegative | None | 指示是否允许使用负号 (-)。来自 MaskedEditShowSymbol枚举的可用值包括:None、Left和 Right。 |
AutoComplete | True | 一个布尔属性,用于指示是否必须自动填写用户未指定的空掩码字符。 |
AutoCompleteValue | "" | 指示在启用 Autocomplete时要使用的默认字符。 |
Century | 1900 | 指示当年份的日期掩码仅有两位数字时要使用的世纪。 |
ClearMaskOnLostFocus | True | 一个布尔属性,用于指示当文本框失去输入焦点时是否删除掩码。 |
ClearTextOnInvalid | False | 一个布尔属性,用于指示当用户输入无效文本时是否清除文本框。 |
ClipboardEnabled | True | 一个布尔属性,用于指示是否允许使用剪贴板进行复制/粘贴。 |
ClipboardText | Your browser security settings don't permit the automatic execution of paste operations(浏览器的安全设置不允许自动执行粘贴操作) | 指示在执行剪贴板粘贴操作时要使用的提示文本。 |
CultureName | "" | 获取并设置要使用的区域性设置的名称。 |
DisplayMoney | None | 指示是否显示货币符号。来自 MaskedEditShowSymbol枚举的可用值包括:None、Left和 Right。 |
ErrorTooltipCssClass | "" | 获取并设置工具提示消息的 CSS类。 |
ErrorTooltipEnabled | False | 一个布尔属性,用于指示当鼠标悬停在内容无效的文本框上方时,是否显示工具提示消息。 |
Filtered | "" | 获取并设置在指定“C”占位符时掩码类型的有效字符列表。 |
InputDirection | LeftToRight | 指示文本输入方向。来自 MaskedEditInputDirection枚举的可用值包括:LeftToRight和 RightToLeft。 |
Mask | "" | 指定扩展器可接受的字符的掩码。 |
MaskType | "" | 使用 MaskedEditType枚举所定义的任意值来指示掩码类型。 |
MessageValidatorTip | True | 一个布尔属性,用于指示当用户在文本框中键入内容时是否显示帮助消息。 |
OnBlurCssNegative | "" | 获取并设置当文本框失去输入焦点且包含负值时所使用的 CSS类。 |
OnFocusCssClass | "" | 获取并设置当文本框获取到输入焦点时所使用的 CSS类。 |
OnFocusCssNegative | "" | 获取并设置当文本框获取到输入焦点且包含负值时所使用的 CSS类。 |
OnInvalidCssClass | "" | 获取并设置当文本无效时所使用的 CSS类。 |
PromptCharacter | _ | 获取并设置要为未指定的掩码字符使用的提示字符。 |
UserDateFormat | None | 指示特定的日期格式。可用值由 MaskedEditUserDateFormat枚举定义。 |
UserTimeFormat | None | 指示特定的时间格式。可用值由 MaskedEditUserTimeFormat枚举定义。 |
MaskType 属性通知扩展器目标控件将接受某个特定数据类型。Mask 属性(字符串类型)指示表示文本框的有效输入的字符序列。例如“12/6/07”和“12-09-2007”都是有效的日期,但它们使用不同的输入掩码。
要生成掩码,需使用预定义的符号作为占位符。图 1 列出了所支持的符号。例如,“999,999.99”掩码会使代码接受带有小数点的数字,至多有一个千位分隔符。图 2 显示了使用掩码编辑器扩展的文本框所显示的最终用户界面。货币符号的外观由 DisplayMoney 属性来控制,并会提示用户必须键入的每个字符。默认提示符为下划线,不过您可以通过 PromptCharacter 属性来更改提示符。
Figure1输入掩码预定义的占位符
符号 | 说明 |
9 | 数字字符 |
L | 字母 |
$ | 字母或空格 |
C | 通过 Filtered属性定义的自定义写字符,区分大小 |
A | 通过 Filtered属性定义的字母或自定义字符 |
N | 通过 Filtered属性定义的数字或自定义字符 |
? | 任意字符 |
/ | 日期分隔符,取决于当前区域性设置 |
: | 时间分隔符,取决于当前区域性设置 |
. | 小数点,取决于当前区域性设置 |
, | 千位分隔符,取决于当前区域性设置 |
转义字符 | |
{ | 重复掩码的起始符 |
} | 重复掩码的终止符 |
图 2运行中的 MaskedEdit 扩展器
对于日期,还可以使用 AcceptAMPM、Century 等其他属性,甚至可以使用 MaskedEditUserDateFormat 枚举中指定的预定义格式之外的自定义用户格式,如下所示:
public enum MaskedEditUserDateFormat { None, DayMonthYear, DayYearMonth, MonthDayYear, MonthYearDay, YearDayMonth, YearMonthDay } |
影响 MaskedEdit 扩展器所应用的格式的许多设置都继承自当前区域性设置。CultureName 属性指示要应用的区域性设置。请注意,此设置将覆盖通过 @Page 指令中的 UICulture 属性为页面定义的区域性设置。
验证掩码输入
虽然掩码扩展器提供有动态格式设置功能,但是还有另外一个组件(掩码验证器)可确保将输入的任何文本都解析为预期类型:
<act:MaskedEditValidator ID="MaskedEditValidator1" runat="server" ControlExtender="MaskedEditExtender1" ControlToValidate="TextBox2" IsValidEmpty="False" EmptyValueMessage="Number is required " InvalidValueMessage="Number is invalid" /> |
图 B 列出了该验证器公开的属性。掩码文本框的 Text 属性返回带格式的文本。对于日期,该属性返回类似于“02/04/2007”的文本;而对于数字输入字段,该属性返回类似于“1,200.00”的文本。即使在页面上对用户显示了货币符号,Text 属性中也不包括货币符号。
FigureBMaskedEditValidator 属性
属性 | 说明 |
AcceptAMPM | 指示时间值是否接受 AM/PM。 |
ConTRolToValidate | 指示要验证的文本框的 ID。 |
ConTRolExtender | 指示附加到文本框的 MaskedEditExtender控件的 ID。 |
ClientValidationFunction | 获取并设置用于自定义验证的客户端 JavaScript函数的名称。 |
EmptyValueBlurredText | 获取并设置当文本框没有输入焦点且为空时所显示的消息。 |
EmptyValueMessage | 获取并设置当文本框具有输入焦点但为空时所显示的消息。 |
InitialValue | 获取并设置文本框的初始值。 |
InvalidValueMessage | 获取并设置当文本框具有输入焦点但内容无效时所显示的消息。 |
InvalidValueBlurredMessage | 获取并设置当文本框没有输入焦点但内容无效时所显示的消息。 |
IsValidEmpty | 指示文本框是否可以保留为空。 |
MaximumValue | 获取并设置输入的***值。 |
MaximumValueBlurredMessage | 获取并设置当超出***值且文本框没有焦点时所显示的消息。 |
MaximumValueMessage | 获取并设置当超出***值且文本框有焦点时所显示的消息。 |
MinimumValue | 获取并设置输入的最小值。 |
MinimumValueBlurredText | 获取并设置当超出最小值且文本框没有焦点时所显示的消息。 |
MinimumValueMessage | 获取并设置当超出最小值且文本框有焦点时所显示的消息。 |
ValidationExpression | 获取并设置用于验证输入的正则表达式。 |
TooltipMessage | 获取并设置当文本框具有输入焦点时所显示的消息。 |
那么,如何将 Text 返回的值解析为逻辑数据类型(日期或小数)呢?可以对 DateTime 和 Decimal 类型使用静态 Parse 方法。但是必须注意所使用的区域性设置。例如,“02/04/2007”可以表示 2 月 4 日(美国区域性设置),也可以表示 4 月 2 日(欧洲区域性设置)。事实上,并没有相关设置来保证输入页所使用的区域性设置与服务器页所使用的区域性设置相匹配。这就存在以下风险:用户根据欧洲区域性设置来键入日期,而将其作为美国区域性日期进行处理。更糟糕的是,使用意大利小数和千位分隔符在数字文本框中输入的值 1200 可能会导致引发异常,因为 Decimal 类型的解析器默认使用美国区域性设置。让我们来看看如何变通解决这些问题。
要牢记以下事实:除非显式设置 CultureName 属性,否则扩展器将默认使用 en-US 区域性设置。在服务器上,系统默认使用 Page 类上 UICulture 属性的值。
在您的 Codebehind 类中,首先获取反映用户界面所使用的区域性设置的 CultureInfo 对象。可以按照下面显示的方法继续操作:
string culture = "en-us"; if (!String.IsNullOrEmpty(MaskedEditExtender1.CultureName)) culture = MaskedEditExtender1.CultureName; CultureInfo info = new CultureInfo(culture); |
然后调用 Parse 方法根据所选区域性设置指定格式提供程序:
NumberFormatInfo numberInfo = info.NumberFormat; DateTimeFormatInfo dateInfo = info.DateTimeFormat; DateTime when = DateTime.Parse(TextBox1.Text, dateInfo); decimal amount = Decimal.Parse(TextBox2.Text, numberInfo); |
图 3 显示了使用不同的区域性设置进行输入时同一页面的行为。
图 3使用不同的区域性设置将数据解析为 .NET 类型
文本框自动完成
您肯定对自动完成功能非常熟悉。该功能会根据输入的前几个字符预测用户正在键入的单词。Internet Explorer 会记录已在地址栏和表单字段中键入的所有字符以自动完成填充。
当然,此功能完全基于浏览器,可以通过将 Autocomplete 属性设置为 On 或 Off,来打开或关闭 和