打造自己的asp.net验证控件

从零开始:ASP.NET与C#打造BBS论坛实战教程 NET框架由公共语言运行时(CLR)和框架类库(FCL)组成。CLR为.NET应用程序提供了运行环境,它负责管理代码的执行和内存分配等。FCL则包含了大量的预先定义的类库,这些库提供了处理文件、字符串、XML和网络请求等常见任务的函数。.NET框架的作用是提供一个统一的开发和运行环境,减少开发者的负担,加快开发速度。 阅读详情

       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 == null) return;
    
    
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>

 

如果想在整个系统中应用这个效果的话,只需将页面尾部的javascript脚本封装到一个js文件中,放在需要应用的页面的尾部,无需再添加任何代码。

 

 

 

 

DotNetTextBox:打造.NET框架下的强大文本输入控件 DotNetTextBox是一个强大且灵活的文本编辑Web控件,它为用户提供了一个功能丰富的界面,用于文本输入、编辑和显示。它适用于各种Web应用程序,特别是需要处理富文本或代码编辑的场景。DotNetTextBox广泛应用于内容管理系统(CMS),论坛和博客平台,提供给用户方便的文本输入和格式化选项。此外,开发者可以通过API和属性扩展其功能,满足特定业务逻辑的需求。外观自定义和用户体验是应用程序吸引用户的重要方面。 阅读详情

相关推荐

ASP.NET与SQL技术打造高效教务管理系统

教务管理系统是高校信息系统的核心组成部分,旨在提高教学资源管理的效率和质量,实现教学活动的信息化。它包括课程安排、学生选课、成绩管理、教务调度等多个模块,为教育管理提供全面解决方案。ASP.NET MVC模型是一种替代传统ASP.NET Web表单模型的架构模式。它强调了应用程序的不同方面(模型、视图和控制器)的分离,以提高可测试性和可维护性。模型(Model)代表应用程序的数据结构,视图(View)是用户界面的展示,而控制器(Controller)处理用户输入并协调模型和视图之间的交互。

weixin_32661831的博客 1050

ASP.NET内置的6种验证控件的使用

ASP.NET控件验证 ASP.NET内置的验证控件有以下6种: RequiredFieldValidator控件 CompareValidator控件 RangeValidator控件 RegularExpressionValidator控件 CustomValidator控件 ValidationSummary控件 1、RequiredFieldValidator控件 验证控件用来验证输入文本中的信息内容是否为空 就是在运行网站注册、登陆的时候,需要输入用户名,当你没有输入的时候,判断为空,然后返回一个

weixin_46067990的博客 1万+

ASP.NET自定义客户端验证控件

microsoft的验证控件用起来特别的麻烦,而且不人性化,所以我写了上面这段客户端验证,一个页面无论有多少控件要验证,一个函数就可以搞定。 比如你要验证一个id为txt_Name文本框不能为空,在Page_Load函数中加上 btn_Sure.Attributes.Add("onclick","txt_Name","请输入姓名","r"); // btn_Sure为提交按钮

ASP.NET学习笔记--自定义验证控件的使用

using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebContro

rorelys的专栏 530

ASP.NET自定义验证控件

NULL 博文链接:https://xiaopin.iteye.com/blog/421463

ML307A模组连接ONENET平台(AT指令步骤教程)

ML307A 是一款集成度高、体积小的物联网通信模组,支持多种无线通信协议,如 LoRa、NB-IoT 等。它具有低功耗、远程通信等特点,适用于多种物联网场景。支持 LoRa 和 NB-IoT 等多种无线通信标准。提供丰富的 GPIO 接口。内置多种传感器支持。UART 接口:用于与微控制器或其他设备通信。GPIO 接口:可以连接外部传感器或执行器。电源接口:用于供电。OneNET 是中国移动推出的一款物联网开放平台,它提供了从数据采集、存储到分析的一站式解决方案。

xiewengeng的博客 5484

转载: 打造自己的asp.net验证控件

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

weixin_33975951的博客 89

知识图谱本体建模之RDF、RDFS、OWL详解

(一)知识图谱本体建模之RDF、RDFS、OWL详解 1.语义网体系 知识图谱于2012年由Google提出,并不是新概念,而是由语义网络(Semantic Network)衍生而来。语义网络由相互连接的节点和边组成,节点表示概念或者对象,边表示他们之间的关系。RDF,RDFS与OWL都是基于语义网的知识表示框架,在节点和边的取值上做了约束,制定了统一标准,为多源数据的融合提供了便利。RDF,RDFS/OWL 属于语义网技术栈,它们的提出,使得语义网克服了语义网络的缺点。其语义网技术栈如下所示。 2.RD

周周的专栏 1万+

视频教程-初级学软件之ASP.NET第四季 验证、母版、主题-.NET

初级学软件之ASP.NET第四季 验证、母版、主题 从事软件开发10年,熟悉...

weixin_29446559的博客 89

Isaacgym使用操作指南

Isaac Gym 是一个强大的仿真工具,特别适合那些需要进行大规模并行仿真和训练的机器人和强化学习任务。通过 GPU 加速、深度学习集成和丰富的物理仿真能力,Isaac Gym 能够显著提高仿真和训练效率,是机器人学和 AI 研究中的一大利器。

Tony Wey的博客 1万+

STM32MP157+AD7606BSTZ四通道IEPE传感器采集方案实战(附完整电路图)

本文详细介绍了基于STM32MP157和AD7606BSTZ的四通道IEPE传感器采集方案,涵盖硬件电路设计、软件驱动开发及系统性能优化。通过精确的恒流源设计和同步采样技术,实现高精度振动信号采集,适用于工业振动监测等应用场景。

weixin_42713608的博客 705

asp.net ajax 和 asp.net 2.0中的fileupload合力打造无刷新

在做一个信息管理平台时用到了图片,就像做一个上传的   正好用的是asp.net Ajax   就试着做了一个   不很好      自定义用户控件文件 PicUpload.ascx      1   2    3 Width="314px" />   4   5   6   自定义用户控件文件 PicUpload.ascx.cs       1using System;    2using

移动开发与培训 447

Transformer数学推导——Q38 旋转位置编码(RoPE)的复数形式 对注意力分数的几何影响分析

RoPE 的复数形式为自然语言处理中的位置编码提供了创新且有效的解决方案。通过深入的数学理论分析,明确了其对注意力分数的几何影响及在捕捉位置信息方面的优势。在 LLM 的实际应用中,RoPE 复数形式在多个任务和场景中展现出强大的性能,特别是在处理长序列文本时,能够有效捕捉长距离依赖、缓解位置编码局限性并提升处理效率。然而,RoPE 复数形式也面临计算复杂度高、超参数调整困难和位置信息平衡等挑战。通过合理的优化策略和与其他技术的结合,有望进一步提升其性能。

墨顿随笔 1420

Asp.net 文章资料整理

如何在数据层分页以提高性能 为gridview添加删除提示。 解决ASP 2.0中GridView控件的删除、插入、编辑命令操作客户端确认问题的另一方法 基于.net开发平台项目案例集锦 EnterPrise应用(5) Security Application Block应用程序块 授权处理(VB.NET) Ajax实现...

weixin_30518397的博客 674

ROS 2在自动驾驶中的应用:感知节点开发

ROS 2在自动驾驶中的应用:感知节点开发 ,人工智能,计算机视觉,大模型,AI,本文围绕ROS 2在自动驾驶感知节点开发展开,介绍了ROS 2基础、感知节点开发流程,包括环境搭建、代码编写等,还阐述了常用传感器感知节点开发、多传感器融合,以及测试调试、性能优化、部署集成等内容,分析了开发面临的挑战与未来趋势,为相关开发提供了全面指导,涉及简单代码示例和概念解释。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 14万+

线性代数 --- 置换矩阵 (Permutation matrix)

置换矩阵 - permutation matrix

松下J27录放机 3万+

asp.net ajax 和 asp.net 2.0中的fileupload合力打造无刷新文件上传控件

 转自:http://www.cnblogs.com/zhiyyang/archive/2006/12/11/589020.html自定义用户控件文件 PicUpload.ascx1@ control language="C#" autoeventwireup="true" inherits="Admin_PicUpload, App_Web_mboefw14" %>2 asp:Im

成林的专栏 1304

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

ASPRunner.NET - ASP.NET 的代码生成器

使用 ASPRunner.NET 低代码平台,构建满足客户精准需求的复杂 Web 数据库应用程序。ASPRunner.NET 让您能够创建强大、动态且安全的应用程序,速度比传统软件编码快 20 倍。

控件与插件之大全 905

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

asp.net速查手册呵呵

 GridView/DataGrid单元格不换行的问题 如何在GridView中使用DataFromatString VS2005新控件之GridView 使用高级技巧系列[一][视频] VS2005新控件之GridView 使用高级技巧 几个.Net开源的CMS、Portal系统 gridview中加弹出窗口用例 G

xiong1000 only focus on asp.net 2.0 6963

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: web自定义控件示例,一个自动分页的datagrid例子
下一篇: asp.net导出数据到Excel的几种方法(1/3)
cpp2017
博客等级 码龄24年 1435粉丝 12原创
评论 11
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值