惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The Hacker News
The Hacker News
Jina AI
Jina AI
aimingoo的专栏
aimingoo的专栏
博客园_首页
B
Blog RSS Feed
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Hugging Face - Blog
Hugging Face - Blog
B
Blog
MyScale Blog
MyScale Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
L
LINUX DO - 热门话题
D
Docker
A
Arctic Wolf
G
Google Developers Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Google DeepMind News
Google DeepMind News
Cisco Talos Blog
Cisco Talos Blog
P
Privacy International News Feed
I
Intezer
博客园 - 叶小钗
T
Threat Research - Cisco Blogs
MongoDB | Blog
MongoDB | Blog
美团技术团队
C
CERT Recently Published Vulnerability Notes
Project Zero
Project Zero
S
Securelist
P
Proofpoint News Feed
Simon Willison's Weblog
Simon Willison's Weblog
V
Visual Studio Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
博客园 - 三生石上(FineUI控件)
Forbes - Security
Forbes - Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
The Cloudflare Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
V
Vulnerabilities – Threatpost
N
News and Events Feed by Topic
博客园 - Franky
The Last Watchdog
The Last Watchdog
T
Tailwind CSS Blog
T
Tenable Blog
Hacker News: Ask HN
Hacker News: Ask HN
雷峰网
雷峰网
Know Your Adversary
Know Your Adversary
Scott Helme
Scott Helme
S
SegmentFault 最新的问题
L
Lohrmann on Cybersecurity
F
Full Disclosure
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org

博客园 - 陋室

成功与一截树枝 sql 操作全集-整理收藏 JavaScript使用技巧精萃(转载) ASP.NET 中在指定的位置处插入字符 如何在mail的正文显示图片 NET设计模式之一:装饰模式(Decorator Pattern) 微软AJAX 教学系列第一讲:ScriptManager控件 微软AJAX 教学系列第一讲:局部刷新Partial Page Updates(翻译) 李开复:21世纪最需要的7种人才 Building a File Service 超卓越的你_读完后让你恢复自信 how to write professional business letters? 到底什么是托管,什么是非托管的研究 数据库设计中的五个范式(本文转载,收藏下) 如何直接用XML做数据源? ASP.NET程序的优化建议<转> ASP.NET部署与安装_MSI制作图文教程. 在打包的时候,创建应用程序池,并自动将程序assign到新创建的池中(MSI制作) Understand SQL Cache Notifications
提示按下大写键的控件:MQTool(提供下载)
陋室 · 2008-06-04 · via 博客园 - 陋室
  

  我们在做用户登陆的时,很多时候我们的密码是区分大小写的,这就存在一个问题.如果你的Caps Lock键是亮着的,尽管你输入的密码是对的,也无法登陆.所以我们有必要在Caps Lock被按下的时候,提示用户.这就是这篇文章所要讲的.
    你阅读过本文,你可以有一下几点收获
    1:拥有一个免费的插件(可以提示Caps Lock)
    2:你会对MicroSoft的验证控件有全新的认识(MicroSoft的验证控件的原理就是这样,当然比这复杂)
    3:你将了解到在Assembly嵌入外部resource

    MQTools控件

本控件的功能:为web用户提供密码输入时的提示功能
    开发环境:.VS2005
    语言:Javascript,C#
   
   Details:
    mqTools是MicroSoft控件Label上的基础上扩展的.之所以选择Label是因为Label本身已经具体
Text, Font, Width, CssClass等属性,这样我们就可以显示提示信息和控件的外观,但还有一个最重要的属性是需要我们自己去完成的,就是TextBoxControlID属性.这样我们就能指定控件验证的对象.
    1:给Label扩展TextBoxControlID属性
   

 1using System;
 2using System.Collections.Generic;
 3using System.Text;
 4using System.Web;
 5using System.Web.UI;
 6using System.Web.UI.WebControls;
 9namespace MQTools
10{
11    public class MQTools:Label
12    {
13        Properties
27    }

28}

29

    2:初始化时隐藏MQTools验证控件:
    我们知道Label被呈现在客户端是的代码是

<span id="ID" >你已经按下了Caps Lock</span>

    因此想到了通过它的Style属性去空值它的Hidden和Show.所以我们得重写Label控件的AddAttributesToRender方法!其实微软的很多控件也是通过类似的扩展去控制显示,样式等等.

1protected override void AddAttributesToRender(HtmlTextWriter writer)
2        {
3            base.AddAttributesToRender(writer);            
4            writer.AddStyleAttribute(HtmlTextWriterStyle.Visibility, "hidden");
5            writer.AddStyleAttribute(HtmlTextWriterStyle.Display, "none");
6        }

  3:准备工作差不多了.那么我们怎么样去提示呢.由于是当用户开始输入的时候,我们就要提示,所以我想到了Client side代码Javasctipt的事件:onkeypress,所以我们下面要做的就是怎么使我们的输入框触发onkeypress事件!这时我们就要重写

 1 protected override void OnPreRender(EventArgs e)
 2        {
 5            if (this.Enabled)
 6            {
 7                // (1) 注册客户端脚本
 8             
if (this.Page != null && !this.Page.ClientScript.IsClientScriptIncludeRegistered(this.GetType(), "MQTools"))
                    Page.ClientScript.RegisterClientScriptInclude("MQTools",
 9                Page.ClientScript.GetWebResourceUrl(this.GetType(),
10                                            "MQTools.JsLib.js"));                
11                // (2) Call CheckCapsLock
12                TextBox tb = GetTextBoxControl();
14               tb.Attributes.Add("onkeypress"string.Format("CheckCapsLock(event, '{0}', {1});"this.ClientID, this.WarningDisplayTime));            
16            }

17            base.OnPreRender(e);
18        }

    4:剩下的就是去完成我们的Javascript脚本了.这个没有什么好说的,直接看代码吧

Code

    5:怎么在将js脚本嵌入assembly?请看下图,在类库中创建一个js文件,右键查看属性.在生成操作选择"嵌入资源".然后在类库的AssemblyInfo.cs中添加代码如下
   

[assembly: WebResource("MQTools.JsLib.js""text/javascript")]
[assembly: WebResource(
"MQTools.JScript1.js""text/javascript")]

    这样我们就可以使用这个js资源了代码如下

// (1) 注册客户端脚本
                Page.ClientScript.RegisterClientScriptInclude("MQTools",
                Page.ClientScript.GetWebResourceUrl(
this.GetType(),
                                            
"MQTools.JsLib.js"));           


最后的效果图如下

总结:
    其实我们看到.这个控件自始至终没有任何难度.关键是你能想到怎么去做.特别是要了解控件的执行顺序,这样我们就可以在控件身上大作文章.

https://files.cnblogs.com/mqcan/MqTools.zip