掩码输入是一种常用的控件我记得第一次看见这种控件是在Visual FoxPro中!感觉功能强大不错现在用C#开发aspNET应用程序也需要用到这种输入的控件便琢磨着自己做一个但是由于Visual FoxPro中的掩码文本框功能太强了一时还不敢去做网上也有一些自制的如/l但是感觉功能都不很适合后来在上看到了他们做的掩码文本框感觉这种方式在Web应用上很适合就把客户端代码down下来了?╯tedy software 作的是产品要花钱!而且很贵USDft)
分析了一下stedy的客户端脚本(VBScript)他们为每一种掩码规则都作了一个客户端的方法如下面是日期掩码格式化的客户端脚本代码
function maskDate( sValue sType )
dim zMonth
zMonth = array( January February March April May June July August September October November December )
if len( trim( sValue ) ) = then
maskDate =
setViewState false
elseif not( isDate( sValue ) ) then
maskDate = # INVALID DATE ENTERED #
setViewState true
else
select case ( sType )
case medium
maskDate = day( dateValue( sValue ) ) & & left( zMonth( month( dateValue( sValue ) ) ) ) & & year( dateValue( sValue ) )
case long
maskDate = zMonth( month( dateValue( sValue ) ) ) & & day( dateValue( sValue ) ) & & year( dateValue( sValue ) )
case else
maskDate = formatDateTime( sValue vbShortDate )
end select
setViewState false
end ifend function
可以看到处理方式是将文本框中的字符串格式化如果格式化成功则显示为格式化后的字符串否则显示# INVALID DATE ENTERED其他的方法与之类似像maskCurrency maskSSN什么的
MaskTextBox客户端有两个自定义属性
<PUBLIC:property name=maskType value= /><PUBLIC:property name=realValue value= />
第一个是掩码格式第二个是文本框真实值如¥真实值为
目前遇到的问题有一个
客户端的文本框如何才能回传给服务器上面所说的两个属性?
想了半天觉着还是用一个Hidden类型的控件储存掩码文本框的真实值这样回传给服务器的时候就能通过对应的Hidden控件的Value属性取得真实值!
C# 代码片段如下
protected override void Render( HtmlTextWriter output )
{
outputWriteBeginTag( input );
outputWriteAttribute( typehidden );
outputWriteAttribute( value );
outputWriteAttribute( id__+
thisUniqueID );
outputWriteAttribute( name__+
thisUniqueID );
outputWrite( HtmlTextWriterTagRightChar );
baseRender( output );
}