`
胡火云
  • 浏览: 45888 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

使用Javascript,CSS和Ajax创建ASP_NET自定义控件

 
阅读更多

在MSDN上看到的文章,原文名称为Who Is Looking: Building a Custom ASP.NET Control that uses Javascript, Cascading Style Sheets, and Ajax,下载以后经过测试,感觉确实不错,下面根据我的理解整理了一下其实现的思路,推荐给大家。
命如其名,这个控件的功能就是在某个客户浏览网页的时候,这个客户的消息就会出现在浏览这个网页的所有客户端上。当某个客户端离开这个网页的时候,这个客户的消息就会从所有别的客户端消失。
程序运行效果:

创建ASP.NET自定义控件
在Visual Studio中,所有的ASP.NET 2.0控件都是自定义控件,创建自己的自定义控件一般需要完成以下三步。
(1)在站点APP_Code下创建一个新类;
(2)修改这个类,让它成为WebControl类(包含在System.Web.UI.WebControls命名空间)的派生类;
(3)重写基类(即WebControl类)的RenderContents()方法。

下面是一个最简单的ASP.NET控件,它的功能只有一个,显示"Hellow World"。

代码
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->using System; using System.Web.UI; using System.Web.UI.WebControls; namespace myControls { public class HelloWorld : WebControl { protected override void RenderContents(HtmlTextWriter writer) { writer.Write("Hello World"); } } }

自定义控件创建好之后,有三种方法将其添加到网页中。
第一种选择是首先在aspx文件添加注册控件的代码:

1 <%@ Register TagPrefix="custom"Namespace="myControls"%>

其中TagPrefix属性的值可随意选取,Namespace属性的值必须与你创建的自定义控件一致,然后在该页的任意位置均可引用此控件 。

<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --><custom:HelloWorld ID="HelloWorld1" runat="server" />

第二种选择是在Web.Config文件中注册此控件,这样你就可以在所有的aspx页面中引用此控件。相关配置如下:

<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --><pages> <controls> <add tagPrefix="custom" namespace="myControls"/> </controls> </pages>

最后一种方式是将控件添加到Visual Studio工具箱中,使用时直接拖拉到网页中。但这个时候你不能在APP_Code文件夹下创建这个控件,而必须将其创建为独立的程序集,具体方法本文后面将会提到。创建好独立的自定义控件后,右键单击Visual Studio工具箱,选择“选择项”,之后会弹出一个对话框,从中选择你自己的程序集,自定义控件将自动出现在工具箱上。

嵌入Javascript
为了获得更好的客户端效果,我们需要引入Javascript和CSS样式表。在ASP.NET中,有一个类叫作ClientScriptManager,可以很方便的对Javascript进行操作,其中比较重要的方法有:

RegisterClientScriptBlock()
RegisterStartupScript()
RegisterClientScriptInclude()
GetWebResourceUrl()
RegisterClientScriptBlock和RegisterStartupScript方法允许你在网页中添加内置Javascript脚本,这两个方法一般用来添加比较简单的Javascript脚本,如果你需要添加复杂的Javascript脚本,可以使用 RegisterClientScriptInclude或 GetWebResourceUrl()方法。RegisterClientScriptInclude()方法将会在网页中加入这样的引用:

<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --><script type="text/Javascript" src="SomeScript.js"></script>

这种方式的缺点在于发布程序的时候需要将独立的js文件一起发布,解决这个问题的办法就是使用GetWebResourceUrl()方法,通过这个方法可以把js文件直接嵌入到控件当中,换句话说就是你发布的程序集将同时包含自定义控件和独立的js文件。与前面注册控件一样,在APP_Code里创建的自定义控件是不能同时包含js文件的,需要将其发布为独立的程序集。
首先我们在Visual Studio里创建一个新的项目,类型选择类库。为了在类库工程里创建自定义控件,首先需要添加对System.Web.Dll的引用,然后选择工程里的 js文件,将其生成事件属性修改为嵌入资源。接下来需要在AssemblyInfo中对每一个嵌入的资源添加WebResource属性,只需打开 Properties里的AssemblyInfo.cs文件,添加以下代码:

<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->[assembly: WebResource("WhoIsLooking.WhoIsLooking.js", "text/javascript")]

OnPreRender()方法中对js文件的调用代码:

代码
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->// Add Javascript include string scriptUrl = Page.ClientScript.GetWebResourceUrl( this.GetType(), "WhoIsLooking.WhoIsLooking.js"); Page.ClientScript.RegisterClientScriptInclude("WhoIsLooking", scriptUrl);

嵌入CSS样式表
方法与嵌入Javascript类似,在AssemblyInfo.cs中添加:

[Assembly: WebResource("WhoIsLooking.WhoIsLooking.css", "text/css")]

在OnPreRender方法中添加:

// Add style sheet to parent page

string cssUrl = Page.ClientScript.GetWebResourceUrl(this.GetType(),

"WhoIsLooking.WhoIsLooking.css");

HtmlLink cssLink = new HtmlLink();

cssLink.Href = cssUrl;

cssLink.Attributes.Add("rel", "stylesheet");

cssLink.Attributes.Add("type", "text/css");

this.Page.Header.Controls.Add(cssLink);

// Add class name

this.CssClass = "WhoIsLooking";
使用Ajax
WhoIsLooking控件采用Ajax技术实时显示访客信息,Ajax是Asynchronous Javascript和 XML的缩写,利用这个技术可以在不刷新整个页面的情况下实现客户端与服务器端之间的数据传送。为了在ASP.NET自定义控件中实现Ajax需要完成以下三个步骤:
1 使用 GetCallbackEventReference()发起客户端请求;
2 实现ICallBackEventHandler 接口响应客户端的请求,这个接口有两个方法需要实现:RaiseCallbackEvent()方法以及GetCallbackResult()方法。
3 创建Javascript客户端函数获取返回的数据并进行相应的操作。

WhoIsLooking每5秒钟发起一次请求,需在OnPreRender()方法中添加以下代码:

string callback = Page.ClientScript.GetCallbackEventReference

(

this,

null,

"WhoIsLooking.UpdateDisplay",

String.Format("'{0}'", this.ClientID),

"WhoIsLooking.CallbackError",

true);

string startupScript = String.Format("setInterval( \"{0}\", {1} );", callback, _PollingInterval * 1000);

Page.ClientScript.RegisterStartupScript(this.GetType(), "WhoIsLooking", startupScript, true);

接下来需要重写RaiseCallbackEvent() 及GetCallbackResult()方法,RaiseCallbackEvent()方法将当前用户加入访客列表,同时也将离开的用户从列表中删除。GetCallbackResult()返回访客的信息,包括用户帐号,姓名,停留时间,浏览器信息,主机名,操作系统信息等。该方法的返回值为一个 JSON数组,JSON是Ajax请求中表示信息的标准格式(关于JSON的更多介绍,请访问json.net)。例如,如果同时有两个用户正在浏览当前网页,JSON的值将会是这样:

[{userId:"fooglm45cjcycw55qi4yluvk",userName:"SUPEREXPERT\\Steve", duration:"0 minute(s)", browser: "IE 7.0", remoteHost: "superexpert.com", platform: "WinXP"},{userId:"1kqatn55sxc4vi55ummxghil",userName:"SUPEREXPERT\\Bill", duration:"0 minute(s)", browser: "Firefox 1.5.0.11", remoteHost: "superexpert.com", platform: "WinXP"}]

最后,WhoIsLooking控件通过UpdateDisplay()方法在客户端显示用户信息,该方法为每一个用户创建一个<div>层存放用户信息。

分享到:
评论

相关推荐

    ASP.NET用户控件和自定义控件

    在ASP.NET中,用户控件和自定义控件是两种重要的组件,它们扩展了.NET Framework的内置控件,帮助开发者创建具有特定功能和交互性的界面元素。 **用户控件(User Control)** 用户控件是ASP.NET中的基本自定义UI元素...

    asp.net 自定义控件 上图文件控件

    在ASP.NET中,自定义控件是开发人员为了满足特定需求而创建的用户界面元素。这些控件可以扩展内置的ASP.NET控件功能,或者完全创新地构建全新的UI组件。"asp.net 自定义控件 上图文件控件"指的是一个特别的自定义...

    asp.net ajax上传 可预览 自定义控件

    在ASP.NET AJAX上传中,通常会使用UpdatePanel控件作为基础,它可以将文件上传的整个过程封装在一次异步调用中,避免了整个页面的刷新。同时,为了实现预览功能,我们需要借助HTML5的File API,这个API允许我们访问...

    CAjax.rar_Ajax 留言_ajax_ajax .net_ajax C#_net

    标题中的“CAjax.rar_Ajax 留言_ajax_ajax .net_ajax C#_net”表明这是一个关于使用C#和.NET框架实现Ajax无刷新留言功能的源码示例。这个压缩包可能包含了用于演示如何在C# Web应用中集成Ajax功能的代码和资源。 ...

    asp.net 自定义下拉多选控件

    在自定义下拉多选控件中,JQuery用于动态创建和管理DOM元素,响应用户的点击事件,以及实现选中项的高亮显示和取消选中等交互效果。 二、ASP.NET控件自定义 在ASP.NET中,我们可以通过继承现有的WebControl或...

    ASP_NET服务器控件与组件开发

    综上所述,ASP.NET服务器控件与组件开发涉及众多概念和技术,包括控件的使用、事件处理、数据绑定、自定义和重用,以及与Web组件和AJAX的集成。深入理解和熟练掌握这些知识点,能帮助开发者构建出功能强大、性能优良...

    rldm.rar_asp 日历控件_asp日历控件

    总的来说,"rldm.rar_asp 日历控件_asp日历控件"提供了一个基于ASP和JavaScript的简单日历解决方案,开发者可以通过这个控件快速集成日期选择功能到自己的ASP应用程序中。在深入使用前,建议先理解其工作原理,根据...

    Asp.net 2.0 自定义控件开发[浮动工具条控件].rar

    在Asp.net 2.0框架中,自定义控件的开发是一项重要的技能,它可以极大地扩展Web应用程序的功能和用户体验。本教程重点讲解如何为Asp.net 2.0开发一个浮动工具条控件,该控件可以实现在网页上动态显示和隐藏,提供...

    ASP.NET多选下拉框自定义控件

    综上所述,创建ASP.NET多选下拉框自定义控件是一个结合了服务器端编程、客户端脚本和Ajax技术的过程,目的是提供更好的用户体验和更高效的页面交互。通过这样的自定义控件,我们可以更好地满足项目需求,提高用户...

    [右键菜单]ASP.NET自定义控件开发

    在ASP.NET中,自定义控件的开发是创建高效、可重用的用户界面组件的关键技术。本主题将深入探讨如何使用C#语言开发一个针对ASP.NET的自定义控件,特别是聚焦于“右键菜单”功能的实现。右键菜单在网页中常见于提供...

    DatePicker asp.net 自定义控件

    创建自定义`DatePicker`控件,我们可以结合HTML、JavaScript和服务器端代码来实现,同时利用AJAX技术提高交互性。 二、实现自定义`DatePicker` 1. **服务器端代码** - 创建一个新的类,继承自`System.Web.UI....

    ASP_AJAX_Ext_Setup

    3. **学习API**:了解并熟悉提供的API和组件,掌握如何创建和使用它们,这通常需要阅读官方文档或示例代码。 4. **性能优化**:合理使用AJAX可以提高用户体验,但过度依赖可能导致页面加载延迟。应权衡异步请求的...

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

    总的来说,创建ASP.NET自定义客户端验证控件是一项高级技巧,它要求开发者具备扎实的ASP.NET、JavaScript和AJAX基础,但也能带来更高效、更符合项目需求的验证解决方案。通过深入理解这些技术,开发者可以为用户提供...

    ASP.NET 自定义日历控件

    2. 创建一个UpdatePanel,将TextBox和自定义日历控件放入其中,这样在触发日历时,页面的其他部分不会刷新。 3. 配置TextBox的属性,如`TextMode="Date"`,使其显示为日期输入框,然后添加一个`OnClick`或`OnFocus`...

    自定义控件案例学习.rar

    - 自定义控件可以利用ASP.NET的AJAX功能,提供客户端脚本支持。通过实现`INamingContainer`接口,可以为控件生成唯一的客户端ID,方便JavaScript访问。 7. **CSS和皮肤** - 自定义控件可以定义自己的CSS类,允许...

    RadControls_for_ASP.NET_AJAX_2009_3_1208_Source

    通过深入研究这个源代码包,开发者可以提升对ASP.NET AJAX开发的理解,学习到如何使用和定制高级UI控件,同时也能掌握Telerik RadControls的内部工作机制,这对于优化性能和实现复杂功能会非常有帮助。此外,对于...

    ASP.NET AJAX各种扩展控件集合网站和Toolkit下载

    4. 自定义和扩展:除了使用预定义的控件,开发者还可以根据需求创建自定义控件,或者扩展已有的Toolkit控件。 总的来说,这个压缩包文件的下载对于那些希望利用ASP.NET AJAX提高Web应用交互性和用户体验的开发者来...

    asp.net的Ajax第三方控件

    在实践中,SampleWebSite可能是一个包含示例代码的项目,展示了如何在ASP.NET应用程序中集成和使用特定的第三方AJAX控件。通过这个项目,开发者可以学习如何配置ScriptManager,引入控件库,以及如何在ASP.NET页面上...

    TreeGrid 树形列表 Asp.net自定义控件

    为了实现和使用这个自定义TreeGrid控件,你需要打开`TreeGrid.sln`,编译项目,然后将编译后的DLL引用到你的ASP.NET应用程序中。通过阅读`readme.txt`获取具体使用方法,参考`Demo`目录下的示例代码理解控件的用法,...

    网页刷新技术 使用技术为JavaScript,c#,asp.net,html,css

    总结起来,网页刷新技术利用JavaScript的AJAX功能、C#和ASP.NET的服务器端事件处理以及HTML和CSS的结构和样式控制,实现了页面的高效局部更新。这种技术极大地提高了Web应用程序的响应速度和用户体验,特别是在实时...

Global site tag (gtag.js) - Google Analytics