原文地址:http://www.codeproject.com/useritems/ASPNET_NumericTextBox.asp
demo下载

源码下载

基于ASP.NET的NumericTextBox控件<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

原作者:Lukas Holota  译者:Carol

只允许用户输入数字的ASP.NET控件

导言:

所有的程序都必须是“傻瓜式”的,因此我们正创建检验用户输入的控件,这便是其中之一。在这个网站(译者注:codeproject)我只找到了针对windows forms的解决方案。以下是ASP.NET解决方案的展示:

首先,对于控件有这样一个概念,它必须具备以下能力:

  • 可选择输入负数
  • 可选择输入小数或整数
  • 可以从语言环境设置中自由选择或下载小数分隔符
  • 处理ctrl+v
  • 具备跨浏览器的兼容性

解决方案——关键点

 

  • 处理所有的字符――最后我选择了“onkeypress”事件,因为如果基于这一事件的方法返回错误的话,字符将不会被键入文本框
  • 过滤字符――所有字符都只有一个键代码,所以我只得把被允许的字符都列了个清单(由数字键盘上输入的数字与键盘顶行输入的数字的代码是不同的)并且像Shift, BackSpace, Delete and arrows这些功能键都必须是被允许的-只需一会儿的检测
  • 可选择减号――减号必须是这一数值的第一个字符,因此我必须对有兼容性问题的光标位置进行校对,最后解决如下:

·                 function getCursorPosition(txt)

·                 {

·                     if(document.selection) // IE

·                     {

·                         txt.focus();

·                         var oSel = document.selection.createRange();

·                         oSel.moveStart('character', -txt.value.length);

·                         return oSel.text.length;

·                     }

·                     else(txt.selectionStart) // Firefox etc.

·                         return txt.selectionStart;

·                 }

  • 可选择小数分隔符――哪一个?――这一控件允许输入小数或整数,但是不同国家使用不同的小数分隔符,所以我制作了一个能根据文化背景动态下载设置的方法:

private char GetDecimalSeparatorFromLocale()

{

return (System.Globalization.CultureInfo.CurrentUICulture.NumberFormat.NumberDecimalSeparator.ToCharArray())[0];

}

  • 小数分隔符必须符合一下几个条件:
  • 必须是第一个字符
  • 必须不是在减号后面
  • 在一个数值中必须只有一个小数分隔符

这一“优美”的条件可检测所有这些条件:

if(txt.value.replace("-", "").length > 0 && getCursorPosition(txt) > 0 && txt.value.indexOf(decimalSeparator) == -1 && decimals)

return true;

else

return false;

break;

。处理Ctrl + V——我曾多次去解决这一问题,最后最简单的方法却运作地最好,在“onchage”事件中有一检测方法。除了数字,可选择地减号以及小数字符外,不管字符是否被允许,都可以被检测

Collapse

function CheckString(txt, negative, decimals, decimalSeparator)

{

var res = "";

var decimalSeparatorCount = 0;

for(i = 0; i < txt.value.length; i++)

{

if(i == 0 && txt.value.charAt(0) == "-" && negative)

res = "-";

else

{

if(IsNumber(txt.value.charAt(i))) // IsNumber function returns true if the char is 0-9

res += txt.value.charAt(i);

else

{

if(txt.value.charAt(i) == decimalSeparator && decimalSeparatorCount == 0 && decimals)

{

res += txt.value.charAt(i);

decimalSeparatorCount++;

}

}

}

}

txt.value = res;

}

  • 跨浏览器的兼容性
  • 就如我上文提到的,IE6,7对于确定光标位置有问题
  • Safari为不同的功能键返回不同的键代码-对所有的键返回0,但是数字以及其他一些不被允许的字符的代码运行正常
  • 已被检测的浏览器:IE 6,7, Opera 9, Firefox 2, Safari for windows beta 3, Netscape 8 (与firefox一样, 用于 Gecko engine)

使用代码

使用这一代码很简便,因为它继承了文本框格式,因此你可以校验和访问文本框里的值

<cp:NumericTextBox AllowNegative="true" AllowDecimals="true" runat="server" ID="NumericTextBox1" />

这一控件主要是基于javascript,因此它可以简单地运用于其他平台。例如PHP, JSP等等,也可以用于ASP.NET。如果把它翻译了,请告知。

ps:这篇文章的控件我还没有用过,如发现有什么Bug,请与原作者联系

转载于:https://www.cnblogs.com/dotLive/archive/2007/10/15/924620.html

[翻译]基于ASP.NET的NumericTextBox控件[Carol]相关推荐

  1. 构建安全的 ASP.NET 网页和控件

    本页内容 本模块内容 目标 适用范围 如何使用本模块 威胁和对策 设计注意事项 输入验证 跨站点脚本 身份验证 授权 模拟 敏感数据 会话管理 参数处理 异常管理 审核和日志记录 小结 其他资源 本模 ...

  2. asp.net的常用控件

    ASP.NET常用第三方控件列表 ASP.NET 漂亮的免费甘特图控件 基于flash与javascript的客户端文件上传组件 在线Word/excel/wps编辑辅助控件 一个三维动态滑块效果的功 ...

  3. ★★★【庖丁解牛:纵向切入Asp.net 3.5控件和组件开发技术系列—(1)读者序】★★★...

    本书主要内容 大部分开发人员在学习Asp.net的过程中都有这样的体会,使用Asp.net开发很多年,但仍然感觉对Asp.net技术的了解比较少,对知识点的了解比较模糊:以及,在工作过程中经常接到克刻 ...

  4. 【开源】我的分页控件正式命名为QuickPager ASP.NET2.0分页控件

    分页控件正式命名为 QuickPager ASP.NET2.0分页控件 . 版本号:2.0.0.1 Framework:.net2.0 分页方式:PostBack .URL (暂时没有实现URL的分页 ...

  5. ASP.NET Atlas简单控件介绍——InputControl,TextBox,Button和CheckBox

    作者:Dflying Chen (http://dflying.cnblogs.com/) 注:本系列文章比较基础,基本为Atlas官方文档的翻译,熟悉Atlas的朋友可以跳过. 本系列有三篇文章: ...

  6. 【开源】QuickPager ASP.NET2.0分页控件V2.0.0.3 【增加了使用说明】

    ================================ 欢迎转载,但是请注明出处.本文出自博客园 .谢谢合作! ================================ 最新版本:V ...

  7. jQuery:收集一些基于jQuery框架开发的控件/jquery插件2

    Horizontal accordion: jQuery 基于jQuery开发,非常简单的水平方向折叠控件. 主页:http://letmehaveblog.blogspot.com/2007/10/ ...

  8. 用JS验证asp.net服务端控件

    可以用javascript来验证asp.net服务端的控件,不过目前只局限于验证textbox(输入框)不能为空的情况.还有一个前提条件是,提交按钮必须是html的控件,再加上一个runat=serv ...

  9. ASP.NET如何给控件增加属性?

    ASP.NET如何给控件增加属性? 今天xuedaonet给大家介绍提利用ASP.NET给控件增加属性的操作方法,请看下文! ASP.net给控件增加属性的思路 因为用户控件也是一个类,双城计中计20 ...

最新文章

  1. bzoj 1086: [SCOI2005]王室联邦
  2. thinkphp5的目录结构和命名规范
  3. 从命令行传递其他变量来制作
  4. linux 安装tomcat 权限不足问题
  5. mac m1下golang连接mysql极速入门
  6. react-native 安装的时候遇到的问题
  7. 六年级计算机应用计划,六年级信息工作计划
  8. Android Studio打包Android Library为jar方案
  9. dockerfile制作镜像及k8s中应用
  10. Python学习总结(3)——数字类型
  11. delphi xe10.4.2 datasnap客户端接收dataset返回值
  12. maven-maven使用-P参数打包不同环境
  13. redis的过期策略【转】
  14. 互联网+制造业,让你的生产管理更容易
  15. 用vivo手机拍照一定要先打开这个设置,不然白浪费这么强大的手机
  16. 平衡二叉树(注意LR和RL)
  17. Deep Speech笔记
  18. Qemu gdb 调试 Liteos realview-pbx-a9 工程
  19. Spring Boot 接口数据加解密就该这样设计~
  20. far在c语言中作用,C语言中的far关键字

热门文章

  1. python安装pygame无法找到SDL.h文件
  2. Hadoop HA 深度解剖
  3. 一文搞清楚 Spark shuffle 调优
  4. linux03-学习记录
  5. 熵、交叉熵、相对熵(KL 散度)意义及其关系
  6. C#报表控件ReportViewer rdlc 例(1) .
  7. Android中的Handler总结
  8. 创建多个虚拟环境 windows python Anacoda tensorflow
  9. Python —— 深拷贝和浅拷贝
  10. 编程高手之路——闭包函数