新瓶旧酒ASP.NET AJAX(5) - 客户端脚本编程(Sys.UI命名空间下的类和快捷方法)

简介:
[索引页]
[源码下载]


新瓶旧酒ASP.NET AJAX(5) - 客户端脚本编程(Sys.UI命名空间下的类和快捷方法)


作者: webabcd


介绍
Sys.UI命名空间下包含与UI相关的类,像控件、事件和Microsoft AJAX Library里的UI属性之类的。快捷方法就是用简短的代码调用某个方法。


关键
1、Sys.UI.DomElement Class
    ·Sys.UI.DomElement.addCssClass( 元素, "CssClass名" );
    ·Sys.UI.DomElement.containsCssClass( 元素, "CssClass名" ); (返回值为元素是否包含有指定的CssClass名)
    ·Sys.UI.DomElement.getBounds( 元素 ); (返回值为JSON对象,其内field分别为:x,y,width,height;分别代表元素的x坐标,y坐标,宽,高)
    ·Sys.UI.DomElement.getLocation( 元素 ); (返回值为JSON对象,其内field分别为:x,y;分别代表元素的x坐标,y坐标)
    ·Sys.UI.DomElement.removeCssClass( 元素, "CssClass名" );
    ·Sys.UI.DomElement.setLocation( 元素, x坐标, y坐标 );
    ·Sys.UI.DomElement.toggleCssClass( 元素, "CssClass名" );

2、Sys.UI.DomEvent Class
    ·Sys.UI.DomEvent.addHandler( 元素 ,  "事件名称" ,  事件处理器 );
    ·Sys.UI.DomEvent.addHandlers( 元素 ,  "事件名称" ,  {"事件名称1"事件处理器1, "事件名称2"事件处理器2, ...} );
    ·Sys.UI.DomEvent.clearHandlers( 元素 );
    ·Sys.UI.DomEvent.removeHandler( 元素 ,  "事件名称" ,  事件处理器 );
    ·该类下的Field
        ·altKey // 是否是关联的alt键触发的事件?是true;否false
        ·button // Sys.UI.MouseButton枚举,用于指定当相关事件发生时,鼠标按键的状态
        ·charCode // 触发了事件的键的字符代码
        ·shiftKey // 发生事件时是否按下了Shift键
        ·clientX // 发生事件时鼠标的x坐标
        ·clientY // 发生事件时鼠标的y坐标
        ·ctrlKey // 发生事件时是否按下了Ctrl键
        ·offsetX // 发生事件时鼠标与触发事件的对象之间的x偏移量
        ·offsetY // 发生事件时鼠标与触发事件的对象之间的y偏移量
        ·screenX // 发生事件时鼠标与用户屏幕之间的x偏移量
        ·screenY // 发生事件时鼠标与用户屏幕之间的y偏移量
        ·target // 触发事件的对象
        ·type // 被触发的事件的名称

3、快捷方法
    ·$get()相当于Sys.UI.DomElement.getElementById()
    ·$addHandler()相当于Sys.UI.DomEvent.addHandler()
    ·$addHandlers()相当于Sys.UI.DomEvent.addHandlers()
    ·$clearHandlers()相当于Sys.UI.DomEvent.clearHandlers()
    ·$removeHandler()相当于Sys.UI.DomEvent.removeHandler()
    ·$create()相当于Sys.Component.create()
    ·$find()相当于Sys.Application.findComponent()

4、 其它请查看官方文档


示例
DomElement.aspx
<%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="DomElement.aspx.cs" 
        Inherits="ClientScripting_SysUI_DomElement" Title="Sys.UI.DomElement Class" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server"> 
        <style type="text/css"> 
                .redBackgroundColor    
                {    
                        background-color:Red; 
                } 
                .blueBackgroundColor    
                {    
                        background-color:Blue; 
                } 
        </style> 
        <p> 
                <input type="button" id="Button1" value="转换CssClass" /> 
        </p> 
        <p> 
                <input type="button" id="Button2" value="移除CssClass" /> 
        </p> 
        <p> 
                <input type="button" id="Button3" value="移动Lable1" /> 
        </p> 
        <p> 
                <asp:Label ID="Label1" runat="server" BackColor="Black" ForeColor="White" Text="Label1" 
                        Width="102px"></asp:Label> 
        </p> 
        <p> 
                <asp:TextBox ID="TextBox1" runat="server" TextMode="MultiLine" Width="500px" Height="300px"></asp:TextBox> 
        </p> 

        <script type="text/javascript" language="javascript"> 
         
        /* 
        $get()相当于Sys.UI.DomElement.getElementById() 
        $addHandler()相当于Sys.UI.DomEvent.addHandler() 
        $addHandlers()相当于Sys.UI.DomEvent.addHandlers() 
        $clearHandlers()相当于Sys.UI.DomEvent.clearHandlers() 
        $removeHandler()相当于Sys.UI.DomEvent.removeHandler() 
        $create()相当于Sys.Component.create() 
        $find()相当于Sys.Application.findComponent() 
        */ 

        // 给ID为“Button1”的元素增加“click”的事件处理器,处理方法为toggleCssClassMethod 
        $addHandler($get("Button1"), "click", toggleCssClassMethod); 
        // 给ID为“Button2”的元素增加“click”的事件处理器,处理方法为blueBackgroundColor 
        $addHandler($get("Button2"), "click", removeCssClassMethod); 

        // 给ID为“Button1”的元素增加增加名为“redBackgroundColor”的CssClass 
        Sys.UI.DomElement.addCssClass($get("Button1"), "redBackgroundColor"); 
        // 给ID为“Button2”的元素增加增加名为“blueBackgroundColor”的CssClass 
        Sys.UI.DomElement.addCssClass($get("Button2"), "blueBackgroundColor"); 

        function toggleCssClassMethod(eventElement) 
        { 
                // 元素eventElement.target是否有名为“redBackgroundColor”的CssClass 
                if (Sys.UI.DomElement.containsCssClass(eventElement.target, "redBackgroundColor")) 
                { 
                        // 将eventElement.target的CssClass变为“blueBackgroundColor” 
                        Sys.UI.DomElement.toggleCssClass(eventElement.target, "blueBackgroundColor"); 
                } 
                else 
                { 
                        // 将eventElement.target的CssClass变为“redBackgroundColor” 
                        Sys.UI.DomElement.toggleCssClass(eventElement.target, "redBackgroundColor"); 
                } 
        } 
    
        function removeCssClassMethod(eventElement)    
        { 
                // 移除eventElement.target的CssClass 
                Sys.UI.DomElement.removeCssClass(eventElement.target, "blueBackgroundColor"); 
        } 

        var elementRef = $get("<%= Label1.ClientID %>"); 
         
        // 获取元素的Bounds信息 
        var elementBounds = Sys.UI.DomElement.getBounds(elementRef); 
         
        var result = ''; 
        result += "Label1的x坐标 = " + elementBounds.x + "\r\n"; 
        result += "Label1的y坐标 = " + elementBounds.y + "\r\n"; 
        result += "Label1的宽度 = " + elementBounds.width + "\r\n"; 
        result += "Label1的高度 = " + elementBounds.height + "\r\n\r\n"; 
         
        // 获取元素的位置信息 
        var elementLoc = Sys.UI.DomElement.getLocation(elementRef); 
         
        result += "Label1的坐标(x, y) = (" + elementLoc.x + "," + elementLoc.y + ")\r\n\r\n"; 

        $get("<%= TextBox1.ClientID %>").value = result; 


        function Button3_ 
        { 
                result = ""; 
                 
                // 设置元素的位置(元素,x坐标,y坐标) 
                Sys.UI.DomElement.setLocation(elementRef, 100, elementLoc.y + 100); 
                 
                elementLoc = Sys.UI.DomElement.getLocation(elementRef); 
                 
                result += "点击移动按钮后    - Label1的坐标(x, y) = (" + elementLoc.x + "," + elementLoc.y + ")\r\n"; 

                $get("<%= TextBox1.ClientID %>").value += result; 
        } 
         
        </script> 

</asp:Content>
 
 
运行结果
1、单击“转换CssClass”按钮
该按钮的样式会在指定的两种CssClass间切换

2、单击“移除CssClass”按钮
该按钮的指定CssClass会被移除

3、TextBox显示为:
Label1的x坐标 = 276
Label1的y坐标 = 189
Label1的宽度 = 102

Label1的高度 = 15 Label1的坐标(x, y) = (276,189)

单击“移动Lable1”按钮后(Lable1的位置发生变化)TextBox显示为:
Label1的x坐标 = 276
Label1的y坐标 = 189
Label1的宽度 = 102

Label1的高度 = 15 Label1的坐标(x, y) = (276,189) 

点击移动按钮后  - Label1的坐标(x, y) = (100,289)


DomEvent.aspx 
<%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="DomEvent.aspx.cs" 
        Inherits="ClientScripting_SysUI_DomEvent" Title="Sys.UI.DomEvent Class" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server"> 
        <p> 
                单击按钮后查看事件的详细信息 
        </p> 
        <p> 
                <input type="button" id="Button1" value="按钮(s)" accesskey="s" /> 
        </p> 
        <p> 
                <asp:Label ID="Label1" runat="server"></asp:Label> 
        </p> 
        <p> </p> 
        <p> 
                同时添加多个事件处理器 
        </p> 
        <p> 
                <input type="button" id="Button2" value="按钮2" /> 
        </p> 
        <p> 
                <asp:Label ID="Label2" runat="server"></asp:Label> 
        </p> 

        <script type="text/javascript" language="javascript"> 
         
        // 给ID为“Button1”的元素增加“click”的事件处理器,处理方法为processEventInfo 
        $addHandler($get("Button1"), "click", processEventInfo); 
         
        var ary =    
        [ 
                // 以下为DomEvent类的Field 
                'altKey', // 是否是关联的alt键触发的事件?是true;否false 
                'button', // Sys.UI.MouseButton枚举,用于指定当相关事件发生时,鼠标按键的状态 
                'charCode', // 触发了事件的键的字符代码 
                'shiftKey', // 发生事件时是否按下了Shift键 
                'clientX', // 发生事件时鼠标的x坐标 
                'clientY', // 发生事件时鼠标的y坐标 
                'ctrlKey', // 发生事件时是否按下了Ctrl键 
                'offsetX', // 发生事件时鼠标与触发事件的对象之间的x偏移量 
                'offsetY', // 发生事件时鼠标与触发事件的对象之间的y偏移量 
                'screenX', // 发生事件时鼠标与用户屏幕之间的x偏移量 
                'screenY', // 发生事件时鼠标与用户屏幕之间的y偏移量 
                'target', // 触发事件的对象 
                'type' // 被触发的事件的名称 
         ]; 

        function processEventInfo(eventElement)    
        { 
                var result = ''; 
                 
                for (var i = 0, l = ary.length; i < l; i++)    
                { 
                        var arrayVal = ary[i]; 
                         
                        if (typeof(arrayVal) !== 'undefined')    
                        { 
                                try    
                                { 
                                        // 输出结果举例:eventElement.altKey 
                                        result += arrayVal + " = " + eval("eventElement." + arrayVal) + '<br/>'; 
                                } 
                                catch (e) 
                                { 
                                        alert(e.message); 
                                } 
                        } 
                } 

                result += eventElement.target.id; 
                 
                $get("<%= Label1.ClientID %>").innerHTML = result; 
        } 
         
        </script> 
         
        <script type="text/javascript" language="javascript"> 
         
        // 给ID为“Button2”的元素增加多个事件处理器 
        Sys.UI.DomEvent.addHandlers 
        ( 
                $get("Button2"),    
                { 
                        click: processEventInfo,    
                        mouseover: processEventInfo,    
                        mouseout: processEventInfo 
                } 
        ); 

        function processEventInfo(eventElement)    
        { 
                var result = ''; 
                result += eventElement.type; 
                $get("<%= Label2.ClientID %>").innerHTML = result; 
        } 
         
        </script> 

</asp:Content>
 
运行结果
1、单击“按钮(s)”(单击位置不同,则显示结果不同)
altKey = false
button = 0
charCode = undefined
shiftKey = false
clientX = 294
clientY = 109
ctrlKey = false
offsetX = 14
offsetY = 3
screenX = 294
screenY = 205
target = [object]
type = click
Button1
 

2、“按钮2”
鼠标经过“按钮2”显示mouseover
鼠标移出“按钮2”显示mouseout
单击“按钮2”显示click


Others.aspx
<%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Others.aspx.cs" 
        Inherits="ClientScripting_SysUI_Others" Title="Sys.UI Other Class" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server"> 
        <fieldset> 
                <legend>title</legend> 
                <div id="parentDiv"> 
                        <div id="childDiv"> 
                                aabbcc 
                        </div> 
                </div> 
                <div> 
                        <input type="button" id="btnHide" value="VisibilityMode.hide" /> 
                          
                        <input type="button" id="btnCollapse" value="VisibilityMode.collapse" /> 
                </div> 
        </fieldset> 

        <script type="text/javascript" language="javascript"> 
                         
                // 让元素“childDiv”变为Control 
                var a = new Sys.UI.Control($get('childDiv')); 
                // 让元素“parentDiv”变为Control 
                var b = new Sys.UI.Control($get('parentDiv')); 

                // 先取得a的父控件,然后再取得这个父控件的id 
                alert(a.get_parent().get_id()); 
                // 让控件“a”变为元素,然后取得这个元素的id 
                alert(a.get_element().id); 

                function btnHide_ 
                { 
                        // 隐藏控件a 
                        a.set_visible(false); 
                        // 隐藏方式为hide,占用页面空间 
                        a.set_visibilityMode(Sys.UI.VisibilityMode.hide); 
                } 
                 
                function btnCollapse_ 
                { 
                        // 隐藏控件a 
                        a.set_visible(false); 
                        // 隐藏方式为collapse,不占用页面空间 
                        a.set_visibilityMode(Sys.UI.VisibilityMode.collapse); 
                } 
                 
        </script> 

</asp:Content>
 
 
运行结果
1、页面加载后
弹出框,信息:parentDiv
弹出框,信息:childDiv

2、单击“VisibilityMode.hide”按钮
“childDiv”被隐藏,但是会占用页面空间

3、单击“VisibilityMode.collapse”按钮
“childDiv”被隐藏,而且不会占用页面空间


OK
[源码下载]
 


     本文转自webabcd 51CTO博客,原文链接:http://blog.51cto.com/webabcd/344799 ,如需转载请自行联系原作者




相关文章
|
2月前
|
开发框架 前端开发 JavaScript
ASP.NET AJAX使用方法概述(三)
ASP.NET AJAX使用方法概述(三)
29 1
|
1月前
|
存储 Go C#
【.NET Core】深入理解IO之File类
【.NET Core】深入理解IO之File类
41 6
|
1月前
|
存储 开发框架 缓存
【.NET Core】你真的了解HttpRuntime类吗
【.NET Core】你真的了解HttpRuntime类吗
20 0
|
2月前
|
消息中间件
.NET 中 Channel 类简单使用
`System.Threading.Channels` 提供异步生产者-消费者数据结构,用于.NET Standard上的跨平台同步。频道实现生产者/消费者模型,允许在任务间异步传递数据。简单示例展示如何创建无界和有界频道,以及多生产者和消费者共享频道的场景。频道常用于内存中的消息队列,通过控制生产者和消费者的速率来调整系统流量。
|
2月前
|
开发框架 缓存 前端开发
安装ASP.NET AJAX (一安装)
安装ASP.NET AJAX (一安装)
42 0
|
2月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
118 0
|
2月前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
47 0
|
2月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
184 5

相关实验场景

更多