`
胡火云
  • 浏览: 42505 次
  • 性别: 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 控件的使用

    7.2 Ajax和用户控件 214 7.3 动态加载用户控件 215 7.3.1 使用引用指令 216 7.3.2 创建多页面向导 220 7.4 小结 226 第三部分 数据访问 第8章 数据访问概述 228 8.1 使用DataBound控件 228 8.1.1 使用列表控件 228 ...

    ASP.NET AJAX入门与案例详解 Part 1

    本书介绍了ASP.NETAJAX框架的基础知识,包括AJAX的入门知识、JavaSeript和CSS等,重点介绍了ASP.NETAJAX的各控件以及ASP.NETAJAX控件工具箱的使用方法,并以作者开发的博客和BBS系统两个完整的案例,详细介绍了...

    ASP.NET.4揭秘

    第12章 使用detailsview控件和formview控件433 12.1 使用detailsview控件433 12.1.1 使用detailsview控件显示数据433 12.1.2 在detailsview控件中使用字段436 12.1.3 使用detailsview控件显示空数据437 12.1.4 使用...

    专业的ASP.NET控件,原生的AJAX支持,丰富的UI效果。

    专业的ASP.NET控件,原生的AJAX支持,丰富的UI效果。 产品特点: No JavaScript,No CSS, No UpdatePanel,No Web Services 备注: 本产品基于 ExtJS, HtmlAgilityPack, Nii.JSON, YUICompressor 开源程序。 ...

    ASP.NET4高级程序设计第4版 带目录PDF 分卷压缩包 part1

    书中还深入讲述了其他ASP.NET图书遗漏的高级主题,如自定义控件的创建、图像处理、加密等。此外,《ASP.NET 4高级程序设计(第4版)》专门提供了两章的内容来教你如何用Ajax 技术制作快速响应的页面,以及如何使用微软...

    ASP.NET4高级程序设计(第4版) 3/3

    书中还深入讲述了其他ASP.NET图书遗漏的高级主题,如自定义控件的创建、图像处理、加密等。此外,《ASP.NET 4高级程序设计(第4版)》专门提供了两章的内容来教你如何用Ajax 技术制作快速响应的页面,以及如何使用微软...

    FineUI(ASP.NET控件) v6.1.0

    FineUI的使命创建 No JavaScript,No CSS,No UpdatePanel,No ViewState,No WebServices 的网站应用程序。支持的浏览器IE 8.0+、Chrome、Firefox、Opera、Safari FineUI 更新日志:v6.0.3修正无法在后台切换工具...

    ExtAspNet Asp.net控件库

    ExtAspNet是一组专业的Asp.net控件库,拥有原生的AJAX支持和丰富的UI效果, 目标是创建没有JavaScript,没有CSS,没有UpdatePanel,没有WebServices的Web应用程序。

    FineUI(ASP.NET UI控件) v4.1.3.rar

    创建 No JavaScript,No CSS,No UpdatePanel,No ViewState,No WebServices 的网站应用程序。 支持的浏览器 IE 8.0 、Chrome、Firefox、Opera、Safari bulid2014-09-09 v4.1.3 母版页支持。 增加新控件...

    FineUI(ASP.NET控件) v6.1.0.zip

    创建 No JavaScript,No CSS,No UpdatePanel,No ViewState,No WebServices 的网站应用程序。 支持的浏览器 IE 8.0 、Chrome、Firefox、Opera、Safari FineUI(ASP.NET控件)页面展示: 相关阅读 同类...

    asp.net知识库

    利用反射实现ASP.NET控件和数据实体之间的双向绑定,并且在客户端自动验证输入的内容是否合法 asp.net报表解决方法 SQLDMO类的使用 SQL过程自动C#封装,支持从表到基本存储过程生成 使用SQLDMO控制 SQL Server 使用SQL...

    ASP.NET高级编程:为校园BBS用户注册提供无刷新验证.pptx

    目 录;;;什么是AJAX AJAX(Asynchronous JavaScript and ...在ASP.NET 3.5中,可以直接拖动AJAX控件,像普通控件一样的使用,实现Web页面的无刷新功能。在ASP.NET 3.5中,Web.config文件中已经声明了AJAX功能。;Scrip

    jquery ajax TreeView asp.net改进版

    &lt;link href="lib/jquery/plugins/treeview/jquery.tree.css" rel="stylesheet" type="text/css" /&gt; &lt;script src="lib/jquery/jquery.js" type="text/javascript"&gt; ...

    基于Extjs的开源控件库ExtAspNet英文版 v3.1.9

    ExtAspNet - 基于 ExtJS 的专业 ASP.NET 2.0 控件库,拥有完善的 AJAX 支持和丰富的界面效果 ExtAspNet 是一组基于 ExtJS 的专业 ASP.NET 2.0 控件库,拥有完善的 AJAX 支持和丰富的界面效果。 ExtAspNet 是为了创建...

    Ajax完全自学手册PPT和源代码(ptt格式)

    11.1.4 使用Microsoft ASP.NET Ajax控件实现Ajax应用 第12章 12.1 使用ASP.NET Ajax控件实现的页面无刷新的简单实例 第13章 AjaxGridView Ajax化的GridView AjaxChartRoom Ajax无刷新聊天室 第14章(\C05) ...

    基于Extjs的开源控件库ExtAspNet中文版 v3.1.9

    ExtAspNet - 基于 ExtJS 的专业 ASP.NET 2.0 控件库,拥有完善的 AJAX 支持和丰富的界面效果 ExtAspNet 是一组基于 ExtJS 的专业 ASP.NET 2.0 控件库,拥有完善的 AJAX 支持和丰富的界面效果。 ExtAspNet 是为了创建...

    FineUI_v3.2.0_source_all.zip_extjs 6_fineui_opera_web UI CSHARP

    FineUI - 基于 ExtJS 的专业 ASP.NET 2.0 控件库,拥有完善的 AJAX 支持和丰富的界面效果 FineUI 是一组基于 ExtJS 的专业 ASP.NET 2.0 控件库,拥有完善的 AJAX 支持和丰富的界面效果。 FineUI 是为了创建没有 ...

    ExtAspNet 是一组专业的Asp.net控件库

    ExtAspNet 是一组专业的Asp.net控件库,拥有原生的AJAX支持和丰富的UI效果。 目标是创建没有JavaScript,没有CSS,没有UpdatePanel,没有WebServices的Web应用程序。 注:ExtAspNet 基于一些开源程序,比如ExtJS, ...

    ExtAspNet_v2.3.2_dll

    ExtAspNet是一组专业的Asp.net控件库,拥有原生的AJAX支持和丰富的UI效果, 目标是创建没有ViewState,没有JavaScript,没有CSS,没有UpdatePanel,没有WebServices的Web应用程序。 支持的浏览器: IE 7.0+, Firefox...

Global site tag (gtag.js) - Google Analytics