网页中控件智能校验的一种实现方法(原创)

介绍了一种使用ASP和JavaScript实现的自动验证方法,该方法能够显著减少前后台校验代码的编写工作量,并提供了一个具体的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       在Web项目中控件值的校验是不可少的,对于有大量控件的页面,程序员通常要使用Javascript编写大量的脚本进行,有没有一种方式可以减少程序员的这种大量重复编码的方式。最近,在一个项目中尝试了这种方式,大大的减少了前后台的校验代码的编写。

       此技术的实现并不复杂,只是实现了一种检验的思路,希望能给给大家起个抛砖引玉的作用。由于工作原因我使用ASP+JS实现,其实语言只是一种工具,关键是思路。当然,也可以用ASP.NET实现。

        本文是Javascript实现的自动验证函数(原创) 的续篇,那片文章里只实现了前台的校验。

测试页面
test.asp
校验的内容:Text控件
校验方式:单一控件和控件数组
特殊属性的说明:
valuetype="integer"   控件值的类型
 msg=",<%=IMSG0002%>"   错误信息
第一项是必须输入项的提示信息;第二项是类型错误的提示信息,两项都可为空但中间的“,”号不能省略。
mustitem="true"  必须输入项,没有这个属性的控件就认为不是必需输入项

 1 ExpandedBlockStart.gif ContractedBlock.gif <% dot.gif
 2ExpandedBlockEnd.gif    Response.CharSet ="gb2312"
 3None.gif
%>
 4 None.gif <!--  #include file="message.inc"  -->
 5 None.gif <!--  #include file="stringtools.inc"  -->
 6 None.gif <!--  #include file="common.inc"  -->
 7 None.gif <!--  #include file="validate.inc"  -->
 8 ExpandedBlockStart.gifContractedBlock.gif <% dot.gif
 9InBlock.gif
10InBlock.gif    Dim strErrMsgID
11ExpandedBlockEnd.gif    Call validate()
12None.gif
%>
13 None.gif < HTML >
14 None.gif < HEAD >
15 None.gif < TITLE >  New Document  </ TITLE >
16 None.gif     < meta  http-equiv ="content-type"  content ="text/html; charset=gb2312"   />
17 None.gif     < meta  http-equiv ="pragma"  content ="no-cache" >
18 None.gif     < meta  http-equiv ="cache-control"  content ="no-cache" >
19 None.gif     < meta  http-equiv ="expires"  content ="0" >
20 None.gif < script  src ="common.js" ></ script >
21 None.gif < script  src ="validate.js" ></ script >
22 ExpandedBlockStart.gifContractedBlock.gif < script  language ="javascript" > dot.gif
23InBlock.gif<!--
24ExpandedSubBlockStart.gifContractedSubBlock.giffunction a(obj)dot.gif{
25InBlock.gif
26InBlock.gif    alert(obj.name);
27ExpandedSubBlockEnd.gif}

28ExpandedBlockEnd.gif//-->
29None.gif
</ script >
30 None.gif </ HEAD >
31 None.gif
32 None.gif < BODY >
33 None.gif < FORM  NAME ="frm"  METHOD =POST  ACTION ="" >
34 None.gif < font  color ="red" > <% = strErrMsgID %> </ font >
35 None.gif < input  type ="hidden"  id ="_page_viewstate"  name ="_page_viewstate"  value ="" >
36 None.gifID < INPUT  TYPE ="text"  id ="txtInt"  NAME ="txtInt"  maxlength ="6"  valuetype ="integer"  msg =",<%=IMSG0002%>"   >< br >
37 None.gifID < INPUT  TYPE ="text"  id ="txtInt"  NAME ="txtInt"  maxlength ="6"  valuetype ="integer"  msg =",<%=IMSG0002%>"   >< br >
38 None.gifID < INPUT  TYPE ="text"  id ="txtInt"  NAME ="txtInt"  maxlength ="6"  valuetype ="integer"  msg =",<%=IMSG0002%>"   >< br >
39 None.gifID < INPUT  TYPE ="text"  id ="txtInt"  NAME ="txtInt"  maxlength ="6"  valuetype ="integer"  msg =",<%=IMSG0002%>"   >< br >
40 None.gif
41 None.gif名称 < INPUT  TYPE ="text"  id ="txtString"  NAME ="txtString"  maxlength ="5"  valuetype ="string"  msg ="<%=IMSG0003%>,<%=IMSG0004%>"  mustitem ="true" >< br >
42 None.gif名称 < INPUT  TYPE ="text"  id ="txtDate"  NAME ="txtDate"  maxlength ="10"  valuetype ="date"  msg ="<%=IMSG0003%>,werwe"  mustitem ="true" >< br >
43 None.gif < INPUT  TYPE ="button"  value ="submit"  onclick ="validate(frm); return false;" >
44 None.gif
45 ExpandedBlockStart.gifContractedBlock.gif < SCRIPT  LANGUAGE ="JavaScript" > dot.gif
46InBlock.gif<!--
47InBlock.gif//validate()
48ExpandedBlockEnd.gif//-->
49None.gif
</ SCRIPT >
50 None.gif </ FORM >
51 None.gif </ BODY >
52 None.gif </ HTML >
53 None.gif


后台检验validate.asp
将前台传来的_page_viewstate参数通过分解得到,页面的校验信息
ValueSeparator  页面控件信息分割符
ItemSeparator   每个可能的参数分割符

 1 None.gif < %
 2 None.gif ' -------------------------------------------------------------------
 3 None.gif' * 函数名                :    validate
 4 None.gif' * 完成日                :    2007/04/04
 5 None.gif' * 更新日                :    2007/04/04
 6 None.gif' * 作者                    :    向东   meil75#hotmail.com
 7 None.gif' * 参数                    :    
 8 None.gif' * 機能説明              :    前台参数的后台校验
 9 None.gif' -------------------------------------------------------------------
10 None.gif Function  validate()
11 None.gif
12 None.gif     Const  ValueSeparator  = " <<__>> "
13 None.gif     Const  ItemSeparator  = " <<==>> "
14 None.gif
15 None.gif     Dim  strViewstate
16 None.gif     Dim  arrayViewstate
17 None.gif     Dim  arrayItem
18 None.gif     Dim  i
19 None.gif     Dim  intAVLen
20 None.gif     Dim  strValue, strMaxlength, strValuetype, strMsg, strMustitem
21 None.gif
22 None.gif    validate  =   True
23 None.gif
24 None.gif    strViewstate  =  Request( " _page_viewstate " )
25 None.gif
26 None.gif
27 None.gif     If  strViewstate  <>   ""   Then
28 None.gif
29 None.gif        arrayViewstate  =   split (strViewstate, ValueSeparator)
30 None.gif        intAVLen  =   UBound (arrayViewstate)
31 None.gif
32 None.gif         For  i  =   0   To  intAVLen
33 None.gif
34 None.gif            arrayItem  =   split (arrayViewstate(i), ItemSeparator)
35 None.gif
36 None.gif             If   UBound (arrayItem)  =   6   Then
37 None.gif
38 None.gif                strValue  =   Trim (arrayItem( 1 ))
39 None.gif                strMaxlength  =  arrayItem( 2 )
40 None.gif                strValuetype  =   LCase (arrayItem( 3 ))
41 None.gif                strMustitem  =   LCase (arrayItem( 5 ))
42 None.gif
43 None.gif                strMsg  =   split (arrayItem( 4 ),  " , " )
44 None.gif
45 None.gif                 '是否是必须输入项
46 None.gif                  If  strMustitem  =   " true "   And  strValue  =   ""   Then
47 None.gif                     If  ( Instr (strErrMsgID,  strMsg( 0 ))  < 1 Then
48 None.gif                        strErrMsgID  =  strErrMsgID  +  strMsg( 0 &   " <br> "
49 None.gif                     End   If
50 None.gif                    validate  =   False
51 None.gif                 End   If
52 None.gif
53 None.gif                 '数值验证
54 None.gif                  If  strValue  <>   ""   And  strValuetype  =   " integer "   And  ( Not  CheckNum(strValue)  Or   Len (strValue)  >  strMaxlength) Then
55 None.gif                     If  ( Instr (strErrMsgID,  strMsg( 1 ))  < 1 Then
56 None.gif                        strErrMsgID  =  strErrMsgID  +  strMsg( 1 &   " <br> "
57 None.gif                     End   If
58 None.gif                    validate  =   False
59 None.gif                 End   If
60 None.gif
61 None.gif                 '文字校验
62 None.gif                  If  strValue  <>   ""   And  strValuetype  =   " string "   And  StrLenB(strValue)  >   CInt (strMaxlength)  Then
63 None.gif                     If  ( Instr (strErrMsgID,  strMsg( 1 ))  < 1 Then
64 None.gif                        strErrMsgID  =  strErrMsgID  +  strMsg( 1 &   " <br> "
65 None.gif                     End   If
66 None.gif                    validate  =   False
67 None.gif                 End   If
68 None.gif
69 None.gif                 '日期校验
70 None.gif                  If  strValue  <>   ""   And  strValuetype  =   " date "   And  isDateValue(strValue)  =   False   Then
71 None.gif                     If  ( Instr (strErrMsgID,  strMsg( 1 ))  < 1 Then
72 None.gif                        strErrMsgID  =  strErrMsgID  +  strMsg( 1 &   " <br> "
73 None.gif                     End   If
74 None.gif                    validate  =   False
75 None.gif                 End   If
76 None.gif
77 None.gif                 ' Response.Write(strValue & "____" & strMaxlength & "____" & strValuetype & _
78 None.gif                  ' "____" & strMsg(0) & "____" & strMsg(1) & "____" & strMustitem & "<BR>")
79 None.gif
80 None.gif             End   If
81 None.gif         Next
82 None.gif
83 None.gif     End   If
84 None.gif
85 None.gif End Function
86 None.gif% >


前台JavaScript校验 validate.js
实现单一控件和控件数组的校验
将控件值和校验属性通过_page_viewstate 参数传递到后台,有点类似ASP.NET里的viewstate。不过这回你可以自己决定它的内容和封装形式了。这可能是也是程序员在编程中最大的诉求了,自己掌握了程序的控制权,使程序的编写更加灵活。
ValueSeparator  页面控件信息分割符
ItemSeparator   每个可能的参数分割符

  1 ExpandedBlockStart.gif ContractedBlock.gif /**/ /******************************************************
  2InBlock.gif* 函数名                :    validate
  3InBlock.gif* 制作日                :    2007/04/05
  4InBlock.gif* 更新日                :    2007/04/05
  5InBlock.gif* 作者                    :    向东   meil75#hotmail.com
  6InBlock.gif* 引数                     :    
  7InBlock.gif* 機能説明              :     Text控件校验
  8ExpandedBlockEnd.gif******************************************************/

  9 None.gif var  controlArrayName;
 10 None.gif var  ValueSeparator  = " <<__>> " ;
 11 None.gif var  ItemSeparator  = " <<==>> " ;
 12 ExpandedBlockStart.gifContractedBlock.gif function  validate() dot.gif {
 13InBlock.gif
 14InBlock.gif    var Elements;
 15InBlock.gif    var i;
 16InBlock.gif    var elLen
 17InBlock.gif    var msgs;
 18InBlock.gif    controlArrayName = "";
 19InBlock.gif
 20InBlock.gif    document.getElementById("_page_viewstate").value = "";
 21InBlock.gif
 22InBlock.gif    //var objs = document.all;
 23InBlock.gif    //var Elements = document.getElementsByTagName("*");
 24InBlock.gif    Elements = document.getElementsByTagName("input");
 25InBlock.gif    arrName ="";
 26InBlock.gif
 27ExpandedSubBlockStart.gifContractedSubBlock.gif    for ( i in Elements ) dot.gif{
 28InBlock.gif    elLen = Elements[i].length;
 29InBlock.gif
 30ExpandedSubBlockStart.gifContractedSubBlock.gif        if (elLen > 1dot.gif{
 31InBlock.gif
 32InBlock.gif            //数组控件的校验
 33ExpandedSubBlockStart.gifContractedSubBlock.gif            if (checkArrayValue(Elements[i]) == falsedot.gif{
 34InBlock.gif                return false;
 35ExpandedSubBlockEnd.gif            }

 36InBlock.gif
 37ExpandedSubBlockStart.gifContractedSubBlock.gif        }
elsedot.gif{
 38InBlock.gif
 39InBlock.gif            //控件校验
 40ExpandedSubBlockStart.gifContractedSubBlock.gif            if (checkValue(Elements[i]) == falsedot.gif{
 41InBlock.gif                return false;
 42ExpandedSubBlockEnd.gif            }

 43ExpandedSubBlockEnd.gif        }

 44ExpandedSubBlockEnd.gif    }

 45InBlock.gif
 46InBlock.gif    //var _frmObj = document.forms;
 47InBlock.gif    //_frmObj[0].submit();
 48InBlock.gif
 49InBlock.gif    return true;
 50ExpandedBlockEnd.gif}

 51 None.gif
 52 ExpandedBlockStart.gifContractedBlock.gif /**/ /******************************************************
 53InBlock.gif* 函数名                :    checkArrayValue
 54InBlock.gif* 完成日                :    2007/04/05
 55InBlock.gif* 更新日                :    2007/04/05
 56InBlock.gif* 作者                    :    向东   meil75#hotmail.com
 57InBlock.gif* 引数                  :    控件数组
 58InBlock.gif* 機能説明              :    数组控件的校验
 59ExpandedBlockEnd.gif******************************************************/

 60 ExpandedBlockStart.gifContractedBlock.gif function  checkArrayValue( obj ) dot.gif {
 61InBlock.gif
 62InBlock.gif    var ctlArray;
 63InBlock.gif    var j;
 64InBlock.gif    var arrLen;
 65InBlock.gif
 66InBlock.gif    ctlArray = obj;
 67InBlock.gif    arrLen = ctlArray.length;
 68InBlock.gif
 69ExpandedSubBlockStart.gifContractedSubBlock.gif    if (controlArrayName != ctlArray[0].name.toLowerCase()) dot.gif{
 70InBlock.gif        controlArrayName = ctlArray[0].name.toLowerCase();
 71InBlock.gif
 72ExpandedSubBlockStart.gifContractedSubBlock.gif        for (j=0; j < arrLen; j++dot.gif{
 73InBlock.gif
 74InBlock.gif            //数组控件的校验
 75ExpandedSubBlockStart.gifContractedSubBlock.gif            if (checkValue(ctlArray[j]) == falsedot.gif{
 76InBlock.gif                return false;
 77ExpandedSubBlockEnd.gif            }
 
 78ExpandedSubBlockEnd.gif        }

 79ExpandedSubBlockEnd.gif    }

 80InBlock.gif
 81InBlock.gif    return true;
 82ExpandedBlockEnd.gif}

 83 None.gif
 84 ExpandedBlockStart.gifContractedBlock.gif /**/ /******************************************************
 85InBlock.gif* 函数名                :    checkValue
 86InBlock.gif* 完成日                :    2007/04/05
 87InBlock.gif* 更新日                :    2007/04/05
 88InBlock.gif* 作者                    :    向东   meil75#hotmail.com
 89InBlock.gif* 引数                    :    控件
 90InBlock.gif* 機能説明              :   控件的校验
 91ExpandedBlockEnd.gif******************************************************/

 92 ExpandedBlockStart.gifContractedBlock.gif function  checkValue ( obj ) dot.gif {
 93InBlock.gif
 94InBlock.gif    var len;
 95InBlock.gif    len = obj.maxLength;
 96InBlock.gif
 97ExpandedSubBlockStart.gifContractedSubBlock.gif    if ( obj.type == "text" ) dot.gif{
 98InBlock.gif
 99InBlock.gif        //if (obj.msg != undefined ) {
100ExpandedSubBlockStart.gifContractedSubBlock.gif        if ( obj.msg ) dot.gif{
101InBlock.gif            msgs = obj.msg.split(",");
102ExpandedSubBlockStart.gifContractedSubBlock.gif        }
 else dot.gif{
103InBlock.gif            return true;
104ExpandedSubBlockEnd.gif        }

105InBlock.gif
106ExpandedSubBlockStart.gifContractedSubBlock.gif        if ( trim(obj.value) == ""dot.gif{
107InBlock.gif
108InBlock.gif            //是否是必须输入项
109ExpandedSubBlockStart.gifContractedSubBlock.gif            if ( obj.mustitem && obj.mustitem.toLowerCase() == "true"dot.gif{
110InBlock.gif
111InBlock.gif                alert(msgs[0]);
112InBlock.gif                getFocusSelect(obj);
113InBlock.gif                return false;
114ExpandedSubBlockEnd.gif            }

115InBlock.gif
116ExpandedSubBlockStart.gifContractedSubBlock.gif        }
else dot.gif{
117InBlock.gif
118InBlock.gif            //数字校验
119ExpandedSubBlockStart.gifContractedSubBlock.gif            if ( obj.valuetype && obj.valuetype.toLowerCase() == "integer" ) dot.gif{
120InBlock.gif
121ExpandedSubBlockStart.gifContractedSubBlock.gif                if ( checkNumLen(trim(obj.value), len) == false ) dot.gif{
122InBlock.gif                    alert(msgs[1]);
123InBlock.gif                    getFocusSelect(obj);
124InBlock.gif                    return false;
125ExpandedSubBlockEnd.gif                }

126InBlock.gif
127InBlock.gif            //文字校验
128ExpandedSubBlockStart.gifContractedSubBlock.gif            }
 else if ( obj.valuetype && obj.valuetype.toLowerCase() == "string" ) dot.gif{
129InBlock.gif
130ExpandedSubBlockStart.gifContractedSubBlock.gif                if ( getLenthByByte(trim(obj.value)) > len)dot.gif{
131InBlock.gif                    alert(msgs[1]);
132InBlock.gif                    getFocusSelect(obj);
133InBlock.gif                    return false;
134ExpandedSubBlockEnd.gif                }

135InBlock.gif
136InBlock.gif            //日期校验
137ExpandedSubBlockStart.gifContractedSubBlock.gif            }
 else if ( obj.valuetype && obj.valuetype.toLowerCase() == "date" ) dot.gif{
138InBlock.gif
139ExpandedSubBlockStart.gifContractedSubBlock.gif                if ( isDate(trim(obj.value)) == false)dot.gif{
140InBlock.gif                    alert(msgs[1]);
141InBlock.gif                    getFocusSelect(obj);
142InBlock.gif                    return false;
143ExpandedSubBlockEnd.gif                }

144ExpandedSubBlockEnd.gif            }

145ExpandedSubBlockEnd.gif        }

146InBlock.gif
147InBlock.gif        //控件信息的保存
148InBlock.gif        var pvObj = document.getElementById("_page_viewstate");
149InBlock.gif        pvObj.value = pvObj.value + ValueSeparator + getCtlInfo(obj);
150InBlock.gif        //alert(pvObj.value);
151ExpandedSubBlockEnd.gif    }

152InBlock.gif
153InBlock.gif    return true;
154ExpandedBlockEnd.gif}

155 None.gif
156 ExpandedBlockStart.gifContractedBlock.gif /**/ /******************************************************
157InBlock.gif* 関数名                :    getCtlInfo
158InBlock.gif* 作成日                :    2007/04/05
159InBlock.gif* 更新日                :    2007/04/05
160InBlock.gif* 作成者                :    向东   meil75#hotmail.com
161InBlock.gif* 引数                  :    控件
162InBlock.gif* 機能説明              :    控件信息获得
163ExpandedBlockEnd.gif******************************************************/

164 ExpandedBlockStart.gifContractedBlock.gif function  getCtlInfo(obj)  dot.gif {
165InBlock.gif
166InBlock.gif    var strValue;
167InBlock.gif    var objMsg;
168InBlock.gif    var objMustitem;
169InBlock.gif
170InBlock.gif    strValue = obj.name + ItemSeparator + obj.value + ItemSeparator +
171InBlock.gif                  obj.maxLength + ItemSeparator + obj.valuetype +ItemSeparator;
172InBlock.gif
173ExpandedSubBlockStart.gifContractedSubBlock.gif    if ( obj.msg ) dot.gif{
174InBlock.gif        strValue = strValue + obj.msg;
175ExpandedSubBlockEnd.gif    }

176InBlock.gif    strValue = strValue + ItemSeparator;
177InBlock.gif
178ExpandedSubBlockStart.gifContractedSubBlock.gif    if ( obj.mustitem) dot.gif{
179InBlock.gif        strValue = strValue + obj.mustitem;
180ExpandedSubBlockEnd.gif    }

181InBlock.gif    strValue = strValue + ItemSeparator;
182InBlock.gif
183InBlock.gif    return strValue;
184ExpandedBlockEnd.gif}


       本人是第一次作ASP的项目,对ASP也不是很精通,难免有不足之处。希望,各位能给予指正。

       下一步,我想用ASP。NET来实现不知道有没有时间了。总觉得。NET的脚本库太庞大了,比较笨重。在项目中使用不便,而且不够灵活。

http

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值