博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
转载: 打造自己的asp.net验证控件
阅读量:6413 次
发布时间:2019-06-23

本文共 5365 字,大约阅读时间需要 17 分钟。

ASP.NET自带的验证控件具有使用方便,开发快捷等优点。开发人员不必使用js就可以方便地对页面各项控件进行输入验证。但是它也有些不足之处,如:界面单调, 只能通过红色字体显示(当然自定义验证控件除外);只能放在某一固定位置;需要占用一定的版面空间,如果错误消息比较长,会严重影响布局,即使将显示方式设为dynamic,当它显示错误消息时会撑大页面,影响美观,因此,我们有必要对它稍改进一下。

     我们研究一下ASP.NET的js代码(下载页面中WebResource.axd?d=SD1NUwMQGhYXe3jLq5kyhRg80avbG6v4rFgfT8pf7Lg1&t=633409665581718750指向的文件)发现用来显示错误消息的是ValidatorUpdateDisplay这个函数来完成的,关键的一句,是 val.style.visibility = val.isvalid ? "hidden" : "visible"; 如果我们想用alert方式显示的话,只需将这句改成alert(val.innerHTML)就可以了,但我们想做得更好看一点,做成类似于QQ聊天窗口的效果,效果可看下图:

 

 

 

 

 

 

要实现这个效果,需要以下几个图片。

  以下是源码:

<%
@ Page Language="C#" AutoEventWireup="true" CodeBehind="myvalid.aspx.cs" Inherits="Test.myvalid" 
%>
 
<
html 
xmlns
="http://www.w3.org/1999/xhtml"
 
>
<
head 
runat
="server"
>
    
<
title
>
无标题页
</
title
>
<
style
>
.MsgC
{
    border-top
:solid 1px #C6C3C6;
    height
:6px;
    background-color
:#FFFBEF;
    font-size
:1px;
}
.MsgL
{
    
  
    BACKGROUND
: url(images/vMsgL.gif)  no-repeat left top;
    width
:7px;
    height
:6px;
    
}
.MsgR
{
 
    BACKGROUND
: url(images/vMsgR.gif)  no-repeat  ;
   
    width
:24px;
    height
:6px;
}
.MsgBL
{
    
  
     
    BACKGROUND
: url(images/vMsgBL.gif)  no-repeat left top;
     width
:7px;
    height
:6px;
  
  
  
    
}
.MsgBC
{
     
     
    BACKGROUND
: url(images/vMsgBC.gif)  repeat-x;
    height
:19px;
    
}
.MsgBR
{
    
 
     
    BACKGROUND
: url(images/vMsgBR.gif)  no-repeat left top;
    width
:24px;
    height
:19px;
    
}
</
style
>
</
head
>
<
body 
style
="font-size:12px"
>
    
<
form 
id
="form1"
 runat
="server"
>
       
<
div 
style
="font-weight:bold;height:60px"
>
 打造自己的验证控件:
</
div
>
       
        姓名:
<
asp:TextBox 
ID
="TextBox1"
 runat
="server"
></
asp:TextBox
>
        
<
asp:RequiredFieldValidator 
ID
="RequiredFieldValidator1"
 runat
="server"
 Display
="dynamic"
 ControlToValidate
="TextBox1"
            ErrorMessage
="请输入姓名!"
 SetFocusOnError
="True"
></
asp:RequiredFieldValidator
><
br 
/>
        证件号:
<
asp:TextBox 
ID
="TextBox2"
 runat
="server"
></
asp:TextBox
>
        
<
asp:RequiredFieldValidator 
ID
="RequiredFieldValidator2"
 runat
="server"
 Display
="dynamic"
 ControlToValidate
="TextBox2"
            ErrorMessage
="请输入证件号!"
 SetFocusOnError
="True"
></
asp:RequiredFieldValidator
>
        
<
asp:RegularExpressionValidator 
ID
="RegularExpressionValidator1"
 runat
="server"
  Display
="dynamic"
 ControlToValidate
="TextBox2"
            ErrorMessage
="证件号格式不符!"
 ValidationExpression
="d{17}[d|X]|d{15}"
></
asp:RegularExpressionValidator
><
br 
/>
        
<
asp:Button 
ID
="Button1"
 runat
="server"
 Text
="确定"
 
/>
        
    
    
</
form
>
</
body
>
</
html
>
<
script 
type
="text/javascript"
>
 
function ValidatorUpdateDisplay(val) {
    
if (typeof(val.display) == "string"{
        
if (val.display == "None"{
            
return;
        }
        
if (val.display == "Dynamic"{
            
//val.style.display = val.isvalid ? "none" : "inline";
           // return;
        }
    }
    
if ((navigator.userAgent.indexOf("Mac"> -1&&
        (navigator.userAgent.indexOf(
"MSIE"> -1)) {
        val.style.display 
= "inline";
    }
    ShowZfValidMsg(val);
   
// val.style.visibility = val.isvalid ? "hidden" : "visible";
}
function Page_ClientValidate(validationGroup) {
    Page_InvalidControlToBeFocused 
= null;
    
if (typeof(Page_Validators) == "undefined"{
        
return true;
    }
    
var i;
    
for (i = 0; i < Page_Validators.length; i++{
        
        ValidatorValidate(Page_Validators[i], validationGroup, 
null);
        
//Added By zhaofeng
        if(!Page_Validators[i].isvalid)// only show one  errmsg
        {
            Page_IsValid 
= false;
            Page_BlockSubmit 
= !Page_IsValid;
            
return false;
        }
        
//Added End
    }
    
    ValidatorUpdateIsValid();
 
    ValidationSummaryOnSubmit(validationGroup);
    Page_BlockSubmit 
= !Page_IsValid;
    
return Page_IsValid;
}
function ShowZfValidMsg(val)
{   
    
//window.status = val.isvalid;
    var tbId  = "tbValidMsg";//+val.controltovalidate;
    var tb = document.getElementById(tbId);
    
if(val.isvalid && tb == nullreturn;
    
    
if(tb == null)
    
{
        tb 
= document.createElement("table");
        tb.border
= 0 ;
        tb.id 
= tbId;
        tb.cellSpacing 
= 0 ;
        tb.cellPadding 
= 0 ;
        
var tr = tb.insertRow(0);
        
var cell = tr.insertCell(0);
        cell.className 
= "MsgL";
        
        cell 
=  tr.insertCell(1);
        cell.className  
= "MsgC";
        cell.innerHTML 
= "&nbsp;";
       
        cell 
=  tr.insertCell(2);
        
        cell.className  
= "MsgR";
        
//the second row
        tr = tb.insertRow(1);
        cell 
= tr.insertCell(0);
        cell.bgColor 
= "#FFFBEF";
        cell.style.cssText
=  "border-left:solid 1px #C6C3C6";
        cell.innerHTML 
= "&nbsp;"
        cell 
= tr.insertCell(1);
        cell.bgColor 
= "#FFFBEF";
        cell.height  
= 40;
        cell.innerHTML 
= "<div style='float:left;padding-top:1px'><img src='images/yellowalert.gif' /></div>"+
        
"<span style='color:black;font-size:12px;height:40px;width:100px;padding-top:10px;padding-bottom:10px;padding-right:0px;padding-left:3px'></span>";
        
        cell 
= tr.insertCell(2);
        cell.bgColor 
= "#FFFBEF";
        cell.style.cssText
=  "border-right:solid 1px #C6C3C6";
        cell.innerHTML 
= "&nbsp;"
        
//the third row
        tr = tb.insertRow(2);
        cell 
= tr.insertCell(0);
        cell.className 
= "MsgBL";
        cell 
=  tr.insertCell(1);
        cell.innerHTML 
= "&nbsp;";
        cell.className  
= "MsgBC";
        cell 
=  tr.insertCell(2);
        
        cell.className  
= "MsgBR";
        document.body.appendChild(tb);
        tb.style.cssText
= "position:absolute;zIndex:500";
    }
    tb.rows[
1].cells[1].childNodes[1].innerHTML = val.innerHTML;
    tb.style.display 
= val.isvalid?"none":"";
    
var obj = document.getElementById(val.controltovalidate);
    
if(obj !=null)
    
{
        
var ary = GetElePos(obj);
        
var l = ary[0]+obj.offsetWidth-tb.offsetWidth;
        
if(l<0) l= 0 ;
        
var t = ary[1]-tb.offsetHeight+15;
        
if(t<0) t = 0 ;
        tb.style.left 
= l 
        tb.style.top 
= t;
    }
    
return ;
    
}
  
function GetElePos(e)
    
{
        
var t=e.offsetTop; 
         
var l=e.offsetLeft; 
         
while(e=e.offsetParent)
         t
+=e.offsetTop; 
         l
+=e.offsetLeft; 
         }
 
         
return [l, t];
    }
</
script
>
本文转自灵动生活博客园博客,原文链接:http://www.cnblogs.com/ywqu/archive/2008/04/03/1136227.html
,如需转载请自行联系原作者
你可能感兴趣的文章
使用border做三角形
查看>>
xhEditor 简约而不简单哦
查看>>
Linux3.10.0块IO子系统流程(3)-- SCSI策略例程
查看>>
学生管理系统~~~
查看>>
mysql 使用set names 解决乱码问题的原理
查看>>
Linux配置SVN服务器(subversion+apache)
查看>>
安卓XML布局中,常用单位的区别~
查看>>
属性动画ValueAnimator用法
查看>>
Eclipse中Ctrl+Alt+Down和Ctrl+Alt+Up不起作用
查看>>
汉堡--结对--软件工程
查看>>
计算机二级C考试有感
查看>>
Android studio 中创建AIDL Service
查看>>
[转]javascript 读取和写入文件,js如何读取文件,js写入文件,js文件操作,js文件夹...
查看>>
JS 12
查看>>
【转】数据归一化和两种常用的归一化方法
查看>>
【转】sql语句优化
查看>>
On coin-tossing measure
查看>>
调用日志输出错误:TypeError: 'int' object is not callable等
查看>>
神秘的 shadow-dom 浅析
查看>>
家庭反对死一批,朋友同事嘲笑死一批,害怕失败死一批,徘徊等待死一批「没有时间」又死一批(转)...
查看>>