自己动手编写一个ajax extender

该扩展的功能有以下几点:
1、当鼠标移到某个按钮上时,该按钮显示一个Css样式;
2、当鼠标移开该按钮时,该按钮显示另外一个Css样式;
3、当鼠标点击该按钮时,执行一个用户自己定义的javascript函数;


该extender共有以下三个文件:
HoverButtonExtender.cs
HoverButtonDesigner.cs
HoverButtonBehavior.js
其中HoverButtonDesigner.cs和HoverButtonBehavior.js的代码分别如下:

HoverButtonBehavior.js
  1None.gif// (c) Copyright Microsoft Corporation.
  2None.gif// This source is subject to the Microsoft Permissive License.
  3None.gif// See http://www.microsoft.com/resources/sharedsource/licensingbasics/sharedsourcelicenses.mspx.
  4None.gif// All other rights reserved.
  5None.gif
  6None.gif
  7None.gif// README
  8None.gif//
  9None.gif// There are two steps to adding a property:
 10None.gif//
 11None.gif// 1. Create a member variable to store your property
 12None.gif// 2. Add the get_ and set_ accessors for your property.
 13None.gif//
 14None.gif// Remember that both are case sensitive!
 15None.gif//
 16None.gif
 17None.gifType.registerNamespace('HoverButton');
 18None.gif
 19ExpandedBlockStart.gifContractedBlock.gifHoverButton.HoverButtonBehavior = function(element) dot.gif{
 20InBlock.gif
 21InBlock.gif    HoverButton.HoverButtonBehavior.initializeBase(this, [element]);
 22InBlock.gif
 23InBlock.gif    // TODO : (Step 1) Add your property variables here
 24InBlock.gif    //
 25InBlock.gif    this._HoverButtonCssClass = null;
 26InBlock.gif    this._UnHoverButtonCssClass = null;
 27InBlock.gif    this._OnButtonClickScript = null;
 28InBlock.gif    this._clickHandler = null;
 29InBlock.gif    this._hoverHandler = null;
 30InBlock.gif    this._unhoverHandler = null;    
 31InBlock.gif
 32ExpandedBlockEnd.gif}

 33None.gif
 34ExpandedBlockStart.gifContractedBlock.gifHoverButton.HoverButtonBehavior.prototype = dot.gif{
 35InBlock.gif
 36ExpandedSubBlockStart.gifContractedSubBlock.gif    initialize : function() dot.gif{
 37InBlock.gif        HoverButton.HoverButtonBehavior.callBaseMethod(this, 'initialize');
 38InBlock.gif        
 39InBlock.gif        
 40InBlock.gif        this._hoverHandler = Function.createDelegate(thisthis._onTargetHover);       
 41InBlock.gif        this._unhoverHandler = Function.createDelegate(thisthis._onTargetUnhover);    
 42InBlock.gif        if(this.get_element() && this._onButtonClick)
 43ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 44InBlock.gif            this._clickHandler = Function.createDelegate(this,this._onButtonClick);
 45InBlock.gif            $addHandler(this.get_element(),'click',this._clickHandler);
 46ExpandedSubBlockEnd.gif        }

 47ExpandedSubBlockStart.gifContractedSubBlock.gif        this._hoverBehavior = $create(AjaxControlToolkit.HoverBehavior, dot.gif{unhoverDelay:1, hoverElement: null}nullnullthis.get_element());
 48InBlock.gif        this._hoverBehavior.add_hover(this._hoverHandler);
 49InBlock.gif        this._hoverBehavior.add_unhover(this._unhoverHandler);  
 50InBlock.gif        // TODO: add your initalization code here
 51ExpandedSubBlockEnd.gif    }
,
 52InBlock.gif
 53ExpandedSubBlockStart.gifContractedSubBlock.gif    dispose : function() dot.gif{
 54InBlock.gif        // TODO: add your cleanup code here
 55ExpandedSubBlockStart.gifContractedSubBlock.gif         if (this._hoverBehavior) dot.gif{
 56InBlock.gif            this._hoverBehavior.dispose();
 57InBlock.gif            this._hoverBeahvior = null;            
 58ExpandedSubBlockEnd.gif        }
        
 59InBlock.gif        HoverButton.HoverButtonBehavior.callBaseMethod(this, 'dispose');
 60ExpandedSubBlockEnd.gif    }
,
 61InBlock.gif
 62InBlock.gif
 63InBlock.gif    _onTargetHover : function(eventArgs)
 64ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
 65InBlock.gif        var e = this.get_element();   
 66InBlock.gif        Sys.UI.DomElement.removeCssClass(e, this._UnHoverButtonCssClass);     
 67InBlock.gif        Sys.UI.DomElement.addCssClass(e, this._HoverButtonCssClass);
 68ExpandedSubBlockEnd.gif    }
,
 69InBlock.gif    
 70InBlock.gif        //onUnHover
 71InBlock.gif    _onTargetUnhover: function(eventArgs)
 72ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
 73InBlock.gif        var e = this.get_element();   
 74InBlock.gif        Sys.UI.DomElement.removeCssClass(e, this._HoverButtonCssClass);     
 75InBlock.gif        Sys.UI.DomElement.addCssClass(e, this._UnHoverButtonCssClass);
 76ExpandedSubBlockEnd.gif    }
,
 77InBlock.gif    _onButtonClick: function(eventArgs)
 78ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
 79ExpandedSubBlockStart.gifContractedSubBlock.gif         if (this._OnButtonClickScript) dot.gif{
 80InBlock.gif                window.setTimeout(this._OnButtonClickScript, 0);
 81ExpandedSubBlockEnd.gif            }

 82ExpandedSubBlockEnd.gif    }
,
 83InBlock.gif    // TODO: (Step 2) Add your property accessors here
 84InBlock.gif    //
 85ExpandedSubBlockStart.gifContractedSubBlock.gif    get_HoverButtonCssClass : function() dot.gif{
 86InBlock.gif        return this._HoverButtonCssClass;
 87ExpandedSubBlockEnd.gif    }
,
 88InBlock.gif
 89ExpandedSubBlockStart.gifContractedSubBlock.gif    set_HoverButtonCssClass : function(value) dot.gif{
 90InBlock.gif        this._HoverButtonCssClass = value;
 91ExpandedSubBlockEnd.gif    }
,
 92ExpandedSubBlockStart.gifContractedSubBlock.gif     get_UnHoverButtonCssClass : function() dot.gif{
 93InBlock.gif        return this._UnHoverButtonCssClass;
 94ExpandedSubBlockEnd.gif    }
,
 95InBlock.gif
 96ExpandedSubBlockStart.gifContractedSubBlock.gif    set_UnHoverButtonCssClass : function(value) dot.gif{
 97InBlock.gif        this._UnHoverButtonCssClass = value;
 98ExpandedSubBlockEnd.gif    }
,
 99InBlock.gif    
100InBlock.gif    set_OnButtonClickScript: function(value)
101ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
102InBlock.gif        this._OnButtonClickScript = value;
103ExpandedSubBlockEnd.gif    }
,
104InBlock.gif    
105InBlock.gif    get_OnButtonClickScript: function()
106ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
107InBlock.gif        return this._OnButtonClickScript;
108ExpandedSubBlockEnd.gif    }

109ExpandedBlockEnd.gif}

110None.gif
111None.gifHoverButton.HoverButtonBehavior.registerClass('HoverButton.HoverButtonBehavior', AjaxControlToolkit.BehaviorBase);
112None.gif

这里注意一下第80行,window.setTimeout(this._OnButtonClickScript, 0); 这个_OnButtonClickScript是一个字符串,表示客户端页面上用户自己定义的一个函数的名字,通过这个语句就能够执行整个客户端函数。有了这样的机制,用户就能够自己定义按钮的响应函数了。
HoverButtonExtender.cs

None.gif// (c) Copyright Microsoft Corporation.
None.gif
// This source is subject to the Microsoft Permissive License.
None.gif
// See http://www.microsoft.com/resources/sharedsource/licensingbasics/sharedsourcelicenses.mspx.
None.gif
// All other rights reserved.
None.gif

None.gif
using System;
None.gif
using System.Web.UI.WebControls;
None.gif
using System.Web.UI;
None.gif
using System.ComponentModel;
None.gif
using System.ComponentModel.Design;
None.gif
using AjaxControlToolkit;
None.gif
using Microsoft.Web.UI;
None.gif
None.gif
None.gif[assembly: System.Web.UI.WebResource(
"HoverButton.HoverButtonBehavior.js""text/javascript")]
None.gif
None.gif
namespace HoverButton
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif    [Designer(
typeof(HoverButtonDesigner))]
InBlock.gif    [ClientScriptResource(
"HoverButton.HoverButtonBehavior""HoverButton.HoverButtonBehavior.js")]
InBlock.gif    [TargetControlType(
typeof(Control))]
InBlock.gif    [RequiredScript(
typeof(HoverExtender))]
InBlock.gif    [RequiredScript(
typeof(CommonToolkitScripts))]
InBlock.gif    
public class HoverButtonExtender : ExtenderControlBase
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
// TODO: Add your property accessors here.
InBlock.gif        
//
InBlock.gif
        [ExtenderControlProperty]
InBlock.gif        [DefaultValue(
"")]
InBlock.gif        
public string HoverButtonCssClass
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
get
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
return GetPropertyStringValue("HoverButtonCssClass");
ExpandedSubBlockEnd.gif            }

InBlock.gif            
set
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                SetPropertyStringValue(
"HoverButtonCssClass", value);
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        [ExtenderControlProperty]
InBlock.gif        [DefaultValue(
"")]
InBlock.gif        
public string UnHoverButtonCssClass
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
get
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
return GetPropertyStringValue("UnHoverButtonCssClass");
ExpandedSubBlockEnd.gif            }

InBlock.gif            
set
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                SetPropertyStringValue(
"UnHoverButtonCssClass", value);
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        [ExtenderControlProperty]
InBlock.gif        [DefaultValue(
"")]
InBlock.gif        
public string OnButtonClickScript
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
get
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
return GetPropertyStringValue("OnButtonClickScript");
ExpandedSubBlockEnd.gif            }

InBlock.gif            
set
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                SetPropertyStringValue(
"OnButtonClickScript", value);
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

InBlock.gif        
InBlock.gif
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif


该扩展的使用,代码如下:
 1ExpandedBlockStart.gifContractedBlock.gif<%dot.gif@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
 2None.gif
 3None.gif<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
 4ExpandedBlockStart.gifContractedBlock.gif<%dot.gif@ Register Assembly="HoverButton" Namespace="HoverButton" TagPrefix="cc1"%>
 5None.gif
 6None.gif<html xmlns="http://www.w3.org/1999/xhtml">
 7None.gif<head runat="server">
 8None.gif    <link href="CSS/StyleSheet.css" rel="stylesheet" type="text/css" />
 9None.gif    <title>测试HoverButton</title>
10None.gif</head>
11None.gif<body>
12None.gif    <form id="form1" runat="server">
13None.gif        <asp:ScriptManager ID="ScriptManager1" runat="server" />
14None.gif        <div>
15None.gif            <asp:textbox id="TextBox1" runat="server"></asp:textbox>
16None.gif            <asp:button id="Button1" runat="server" text="Button" />            
17None.gif            <cc1:HoverButtonExtender runat="server" id="hbe" targetcontrolid="Button1"  HoverButtonCssClass="hoverbutton" unhoverbuttoncssclass="unhoverbutton"></cc1:HoverButtonExtender>
18None.gif        </div>
19None.gif    </form>
20None.gif</body>
21None.gif</html>
22None.gif

希望能对您有帮助。

转载于:https://www.cnblogs.com/strinkbug/archive/2006/12/21/599462.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/263209.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode—<搜索与回溯专项>剑指 Offer 55 - I、55 - II、64、68 - I、68 - II

剑指 Offer 55 - I. 二叉树的深度、55 - II. 平衡二叉树、64. 求12…n、68 - I. 二叉搜索树的最近公共祖先、68 - II. 二叉树的最近公共祖先 题目描述&#xff1a; [55 - I] [55 - II] [64] 求 12…n &#xff0c;要求不能使用乘除法、for、while、if、else、switch、case等关…

Tip:使用Extender的ResolveControlID事件

1、分析 不知道大家在使用ASP.NET AJAX Control Toolkit里的各个Extender控件时&#xff0c;有没有接触过ResolveControlID事件&#xff1f;这个事件在官方也只用了很少的笔墨来描述。的确&#xff0c;这个事件不太常用&#xff0c;看看ASP.NET AJAX的演示站点&#xff0c;根本…

《算法导论》——MergeSort

前言&#xff1a; 在今后的日子里&#xff0c;我将持续更新博客&#xff0c;讨论《算法导论》一书中的提到的各算法的C实现。初来乍到&#xff0c;请多指教。 今日主题&#xff1a;   今天讨论《算法导论》第二章算法基础中的归并排序算法。下面是该算法的代码Merge.h&#x…

react 路由v6

这里是区别&#xff1a;V5 vs V6 这里是官网&#xff1a;可以查看更多高级属性 基本使用&#xff1a; 1、配置文件 src/routes/index import React from "react";const Home React.lazy(() > import("../Pages/Home")); const About React.lazy(()…

Win8下在Vmware11中安装使用苹果系统OS X 10.10

原文:Win8下在Vmware11中安装使用苹果系统OS X 10.10近来因为需要做 iOS 的项目&#xff0c;所以需要多花一些时间看看敲敲代码。因为自己手头上并没有 Mac&#xff08;过年为了闲的时候能玩玩游戏买了联想&#xff0c;唉&#xff09;&#xff0c;想想不能只靠每天在公司的时间…

《Windows Communication Foundation之旅》系列之二

《Windows Communication Foundation之旅》系列之二 三、WCF的技术要素作为基于SOA&#xff08;Service Oriented Architecture&#xff09;的一个框架产品&#xff0c;WCF最重要的就是能够快捷的创建一个服务&#xff08;Service&#xff09;。如下图所示&#xff0c;一个WCF…

centos 记录用户行为轨迹

遇到问题&#xff1a;公司增加了运维管理员&#xff0c;为确保服务器安全&#xff0c;和发生问题的时候好确认问题&#xff0c;需要记录每位服务器登陆者的行为轨迹。解决问题&#xff1a;linux script 命令正有如此强大的功能。满足我们需求。script记录终端会话。操作步骤&am…

Android内核剖析

--Android内核剖析 柯元旦 编著ISBN 978-7-121-14398-4 2011年9月出版定价&#xff1a;79.90元16开616页内容简介&#xff1a;本书内容分别从基础、内核、系统、编译以及硬件驱动几个方面对Android内核相关知识进行深入剖析&#xff0c;详细分析了Android内核的内部机制&#…

Bitmap的秘密

为什么80%的码农都做不了架构师&#xff1f;>>> 之前已经参加过几次QCon峰会&#xff0c;不过今年QCon 2014 上海峰会对我来说比较特别&#xff0c;不再只是一名听众&#xff0c;而是第一次登台演讲。感觉的确不太一样&#xff0c;一来是身份从听众变成了讲师&…

POJ 2018 Best Cow Fences (二分答案构造新权值 or 斜率优化)

$ POJ~2018~Best~Cow~ Fences $&#xff08;二分答案构造新权值&#xff09; $ solution: $ 题目大意&#xff1a; 给定正整数数列 $ A $ &#xff0c;求一个平均数最大的长度不小于 $ L $ 的子段 这道题首先我们如果没有长度限制&#xff0c;直接扫一遍数组即可而有了长度限制…

hdu 2531 Catch him

Catch him Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 124 Accepted Submission(s): 49 Problem Description在美式足球中&#xff0c;四分卫负责指挥整只球队的进攻战术和跑位&#xff0c;以及给接球员传球…

POJ 3889 Fractal Streets(逼近模拟)

$ POJ~3889~Fractal~Streets $&#xff08;模拟&#xff09; $ solution: $ 这是一道淳朴的模拟题&#xff0c;最近发现这种题目总是可以用逼近法&#xff0c;就再来练练手吧。 首先对于每个编号我们可以用逼近法求出它在各个图上是处于左上&#xff0c;右上&#xff0c;左下&a…

我,只关心接口

我们去饭店吃饭&#xff0c;坐下。然后叫&#xff1a;服务员&#xff01;好&#xff0c;服务员来了。你会说&#xff1a;倒茶。或说&#xff1a;点菜。是吧。你不会说&#xff1a;来&#xff0c;我们讨论一下什么是面向对象吧。这是为什么呢&#xff1f;很简单&#xff0c;对你…

POJ 2054 Color a Tree (贪心)

$ POJ~2054~Color~a~Tree $ $ solution: $ 我们先从题中抽取信息&#xff0c;因为每个点的费用和染色的次数有关&#xff0c;所以我们可以很自然的想到先给权值大的节点染色。但是题目还说每个节点染色前它的父亲节点也必须被染色&#xff0c;这就有了很多的后效性。 暂时没有办…

使用Null Object设计模式[转]

在ESFramework的设计实现中&#xff0c;很多地方都用到了Null Object设计模式。Null Object模式的含义在于&#xff0c;提供一个对象给指定的类型&#xff0c;用以代替这个对象为空的情况。 Null Object提供了“什么也不做”的行为,隐藏来自它的合作者的细节。对于如何理解和应…

angular input使用输入框filter格式化日期

最近使用angular日期选取器。只需要把所选的输出迄今input输入框&#xff0c;根据默认的假设&#xff0c;显示是在时间的形式的时间戳。不符合规定。需要格成一个特定的公式格公式。但input上ng-model不能直接对用于filter。因此内容需要一种方法来在这里显示格式化。 网上寻找…

CH0805 防线 (二分值域,前缀和,特殊性质)

$ CH~0805~ $ 防线 (二分值域&#xff0c;前缀和&#xff0c;特殊性质) $ solution: $ 注意博主所给题面的输出和原题有些不同 这道题当时想了很久很久&#xff0c;就是想不到怎么写。果然还是太 $ vegetable $ 了。首先我们可以肯定的是&#xff0c;我们不能暴力枚举&#xff…

基于Layui实现的树形菜单页面

基于Layui实现的树形菜单页面具体方法实现方法一&#xff1a;针对Layui模板的前后端统一更新1. 删除2. 添加3. 后端方法二&#xff1a;基于Dtree实现的纯前端树形增删改文中的组件地址具体方法实现 实现树形菜单&#xff0c;本文将给出两种实现方式。 针对Layui前端模板EasyW…

POJ 1723 Soldiers (中位数)

$ POJ~1723~Soldiers $ (中位数) $ solution: $ 这道题说难也不算太难&#xff0c;但是当时自己想的很矛盾。所以还是列一篇题解。 这道题首先比较容易看出来的就是&#xff1a;行和列是两个分开的问题&#xff0c;而且行的移动就是一个仓库选址的板子&#xff0c;直接求中位数…

(一)Windows环境下汇编编程读书笔记

看了一节关于80x86系列处理器简史&#xff0c;不知道云里和雾里&#xff0c;什么晶体管啊&#xff0c;什么什么之类的不知道云里和雾里&#xff0c;看了讲什么都不知道啊&#xff01; 转载于:https://www.cnblogs.com/Nuxgod/articles/692990.html