asp.net 自定义控件

摘要:
在Visual Studio中,所有ASP。NET 2.0控件是自定义控件。要创建自己的自定义控件,需要完成以下三个步骤。使用系统;使用System.Web。UI;使用System.Web.UI。Web控件;namespacemyControls{publicclassHelloWorld:WebControl{protectedoverridevoidRenderContent{writer.Write;}}创建自定义控件后,有三种方法可以将其添加到网页中。第一个选项是在aspx文件中添加已注册控件的代码:可以随意选择TagPrefix属性的值,并且Namespace属性的值必须与您创建的自定义控件一致,然后可以在页面上的任何位置引用此控件。就像以前注册的控件一样,您可以在APP_代码中创建的自定义控件不能同时包含js文件。它们需要作为独立的程序集发布。

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

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


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文件添加注册控件的代码:
   

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

<custom:HelloWorld ID="HelloWorld1" runat="server" />
    第二种选择是在Web.Config文件中注册此控件,这样你就可以在所有的aspx页面中引用此控件。相关配置如下:


<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()方法将会在网页中加入这样的引用:
     

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


[assembly: WebResource("WhoIsLooking.WhoIsLooking.js", "text/javascript")]    OnPreRender()方法中对js文件的调用代码:


// 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 自定义控件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇写壳1TestNG入门——注解之Before/After下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

关于浏览器对html, js,css的解析先后顺序的理解

1.首先要了解页面的结构(包含哪些元素?哪些计算机语言能够在页面中运行 ) (1)html          不仅可以包含文字,还可以包含图片、链接,甚至音乐、程序等非文字元素的标记语言          (展示给用户,不能太单调,css) (2)css          是一种用来表现HTML的计算机语言,能使HTML页面变得更加美观        ...

分享12款 JavaScript 表格控件(DataGrid)

JavaScript 表格控件可以操作大数据集的 HTML 表格,提供各种功能,如分页、排序、过滤以及行编辑。在本文中,我们整理了13个最好的 JavaScript 表格插件分享给开发人员,开发者可以很容易地添加表格操作功能到 Web 应用程序中。 您可能感兴趣的相关文章 网站开发中很有用的 jQuery 效果【附源码】 分享35个让人惊讶的 CSS3...

原生JavaScript判断是否为邮箱、危险字符、验证长度、验证网址、验证小数、整数、浮点数等常用的 js 验证

(71~80)验证篇这一篇文章主要是10个比较常用表单验证功能,包括了邮箱、危险字符、验证长度、验证网址、验证小数、整数、浮点数等常用的验证,有了这些代码片段,平时的表单验证也可以不需要jquery的验证插件了,希望可以帮到大家。。。 71、原生JavaScript判断是否为邮箱 复制代码 代码如下: functionisEmail(str){...

用javascript的classList代替jquery的class操作

javascript的className操作方法比较难受,他获取的是一个连续的字符串 必须要用split拆分开,好多人因此想去用jquery的addClass,removeClass,hasClass等等 classList解决了这个问题,虽然兼容性并不算好。但会更好的,我们先学习一下 HTMLElement都会有classList属性, 主要方法有如下:...

跳转页面的三种方式

使用header()函数 在php页面的最开头输入如下代码: <?php header(“location:http://www.yedward.net”); ?> 那么,我们命名为1.php,当访问1.php的时候,就会自动跳转到www.yedward.net页面,这里需要强调的是,使用该种方法,必须要将这行代码写在最前面,如果不想写在前...

语法高亮插件SyntaxHighlighter的使用教程

首先到这里下载其源码。里面东西挺多的,我们基本上可以把它放到两个文件夹就是。其中shCore.js与shCore.js与clipboard.swf放到js文件夹中,shCore.css还有另一个CSS文件(随你挑一个吧)与所有图片放到style文件夹中。如果你想高亮html或xml代码,那么就在js多放一个shBrushXml.js,如果要高亮javascr...