仓酷云

标题: NET网页编程之详解ASP.NET自界说控件开辟实例 [打印本页]

作者: 飘飘悠悠    时间: 2015-1-16 14:27
标题: NET网页编程之详解ASP.NET自界说控件开辟实例
Java欺骗了我们那么多年,如今的多核时代,我认为它气数已尽!本文经由过程完成一个服务端控件来说解一下控件开辟,该控件的功效以下:
1.显现服务端工夫,其实不停更新
2.经由过程手动点击革新按钮以AJAX猎取服务端最新工夫
3.能拖动
4.能记着在页面上的地位,页面回传后地位稳定
5.能设置一个准时工夫,一到这个工夫,主动回传触发用户自界说的事务,
起首新建一个类库项目HampWebControl,再新建一个类叫TipTime1,承继WebControl类。假如不是从已有控件中承继,一样平常就承继WebControl类,它是一切ASP.NET服务端控件的基类。
NET网页编程之详解ASP.NET自界说控件开辟实例
登录/注册后可看大图

我们编译这个项目,再新建一个网站项目,援用HampWebControl项目,新建页面,在工具箱中拖一个TipTime1控件到页面上。
NET网页编程之详解ASP.NET自界说控件开辟实例
登录/注册后可看大图

我们运转该页面,就会发明HTML代码以下:
NET网页编程之详解ASP.NET自界说控件开辟实例
登录/注册后可看大图

就是说默许是出现成一个span标签,能够经由过程重载WebControl基类的TagKey属性来改动。
NET网页编程之详解ASP.NET自界说控件开辟实例
登录/注册后可看大图

如许出现在页面上就是个DIV。HtmlTextWriterTag是个列举,包括了良多HTML标签。
WebControl基类的Render用来出现内容,重载它即可以往页面上出现任何自界说的标签。
NET网页编程之详解ASP.NET自界说控件开辟实例
登录/注册后可看大图

如许在页面上就显现了一个a标签,以下图所示:
NET网页编程之详解ASP.NET自界说控件开辟实例
登录/注册后可看大图

注重看,这时候a标签是在DIV表面,怎样将它放到DIV内里呢?这就要重载WebControl基类的RenderContents办法
NET网页编程之详解ASP.NET自界说控件开辟实例
登录/注册后可看大图

如许这个a标签就在div内里了,以下图所示:
NET网页编程之详解ASP.NET自界说控件开辟实例
登录/注册后可看大图

接上去为最核心的DIV加一些款式,重载基类的AddAttributesToRender办法
NET网页编程之详解ASP.NET自界说控件开辟实例
登录/注册后可看大图

这里有两种写法,使用HtmlTextWriterStyle列举大概间接写CSS属性名。
到这里人人懂得了自界说控件怎样出现在页面上。我们再新建一个类TipTime2,把仍旧重载TagKey为DIV,然后重载RenderContents,显现一个span标签与一个input标签。
NET网页编程之详解ASP.NET自界说控件开辟实例
登录/注册后可看大图

如许页面上显现了以后服务真个工夫与一个按钮,如图所示:
NET网页编程之详解ASP.NET自界说控件开辟实例
登录/注册后可看大图

接上去我们来让用户能够设置按钮上的笔墨,为类TipTime2增添一个Text属性:
NET网页编程之详解ASP.NET自界说控件开辟实例
登录/注册后可看大图

同时将出现按钮的代码改成:
NET网页编程之详解ASP.NET自界说控件开辟实例
登录/注册后可看大图

如许Text属性便呈现在计划视图的属性窗口。
NET网页编程之详解ASP.NET自界说控件开辟实例
登录/注册后可看大图

修正Text的值,页面上按钮上的文本也随着变了。注重Text属性是存储在ViewState中,如许包管了回发后值不会丧失。
如今的成绩是工夫不会变,我们得用javascript来改动它的值。新建一个JS文件TipTime2.js。
这里先要申明的是,项目中已有一个JS文件__WebControlBase.js,内里是一些公用的JS办法,好比绑定事务、猎取控件坐标等,一切的办法都是
该办法的扩大办法:varHampWebControl=function(){}
//中断事务冒泡
HampWebControl.prototype.StopBubble=function(e){
if(e&&e.stopPropagation){e.stopPropagation();
}else
{
window.event.cancelBubble=true;
}
}
如许能够削减全局变量,尽量制止与别的js代码的变量重名。我将每一个控件作为HampWebControl办法的一个扩大办法存在,同时每一个控件对
应一个数组,用以存储页面上一切该控件的js工具。每一个控件对应一个Refresh办法,用以从头绑定事务,这是为懂得决回传后的成绩。
NET网页编程之详解ASP.NET自界说控件开辟实例
登录/注册后可看大图

如今控件出现成HTML的布局是<div><span/><input/></div>,有3个标签,我们必要用3个变量来分离存储它们的DOM工具,便利今后操纵。
NET网页编程之详解ASP.NET自界说控件开辟实例
登录/注册后可看大图

背景对HTML标签定名时以以后控件的ClientID开首,前面依据必要加后缀,如许能够必定水平上避免标签重名。由背景将控件的ClientID传过去,如许即可以猎取一切DOM工具。拖动效果使用的是现成js办法,属于纯javascript效果,这里就不睁开会商了,有乐趣的童鞋能够检察示例项目源码。
NET网页编程之详解ASP.NET自界说控件开辟实例
登录/注册后可看大图

该办法是由背景注册剧本来挪用的,假如在数组中已存在就取该工具,不然从头new一个。并挪用初始化与绑定事务办法。
这时候必要在背景注册该js文件才行。关头的操纵时将该文件的“天生操纵”属性设置为“嵌进的资本”,使得编译的时分该js文件会作为DLL文件的一部分。
NET网页编程之详解ASP.NET自界说控件开辟实例
登录/注册后可看大图

接上去必要声明所需的资本文件,严厉按文件夹的布局来定名。这里注册了2个JS文件:公用JS文件__WebControlBase.js与控件公用的JS文件TipTime2.js。
NET网页编程之详解ASP.NET自界说控件开辟实例
登录/注册后可看大图

然后在代码中注册剧本便可。
NET网页编程之详解ASP.NET自界说控件开辟实例
登录/注册后可看大图

在《道不远人深切剖析ASP.NET2.0控件开辟》这本书中,注册剧本文件的代码是放在OnPreRender办法中,可是实践使用中我发明,假如将自界说控件放在UpdatePanel控件中,就会激发一些成绩,以是我都放在OnLoad办法中往注册剧本文件。
注重注册剧本文件这里用了2种分歧的办法。
第1种是轮回Head标签内里是不是存在了剧本,假如不存在,就拔出一个<script>标签。
第2种间接挪用.NET的注册办法。
///<summary>
///向页面注册大众jacascript文件
///</summary>
///<param?name="control">控件工具</param>
internalstaticvoidRegisterCommonJSFile(Controlcontrol)
{
//注册jacascript文件
Stringjslink="<script?src="+control.Page.ClientScript.GetWebResourceUrl(control.GetType(),"HampWebControl.includes.__WebControlBase.js")+"?type=text/javascript?></script>";Register(jslink,control);
}
///<summary>
///注册资本
///</summary>
///<param?name="strLink">资本字符串</param>
privatestaticvoidRegister(stringstrLink,Controlcontrol)
{
//为了包管资本只注册一次,轮回对照,已存在了就不增加
Booleanflag=false;
for(Int32i=0;i<control.Page.Header.Controls.Count;i++)
{
LiteralControllc=control.Page.Header.ControlsasLiteralControl;
if(lc!=null)
{
if(lc.Text==strLink)
{
flag=true;
break;
}
}
}
if(!flag)
{
LiteralControlinclude=newLiteralControl(strLink);
control.Page.Header.Controls.Add(include);
}
}

第1种是用于注册公用的资本文件,第2种用于注册该控件独有的资本文件。由于第2种办法只能包管多个该控件工具只注册一个剧本,但不克不及包管别的控件也
反复注册了该剧本,以是为了包管公用的资本文件只注册一次,就用第1种体例。
下一步就是注册要实行的剧本代码:

这里假如控件是埋没的,就不注册。实在假如控件时放在别的容器控件中,好比Panel,而父容器控件设置为埋没,那末该控件也不成见,可是仍旧实行了注册下面的剧本的代码,以是要在前台Init办法中往判别响应的DOM工具是不是存在,这里就没有多做判别。
最初设置一下款式,使之变成浮动,则控件在页面上便能拖动了。

先讲到这里,归结一下,次要讲了怎样出现自界说控件,怎样增加属性,怎样增添资本文件。
不可能天天有学习.net),我一同学说,你应该早就有作品啦。我惶惶然……
作者: 爱飞    时间: 2015-1-18 14:41
可以看作是VC和Java的混合体吧,尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性。
作者: 愤怒的大鸟    时间: 2015-1-25 08:48
现在主流的网站开发语言无外乎asp、php、asp.net、jsp等。
作者: 第二个灵魂    时间: 2015-2-2 21:24
主流网站开发语言之JSP:JSP和Servlet要放在一起讲,是因为它们都是Sun公司的J2EE(Java2platformEnterpriseEdition)应用体系中的一部分。
作者: 小妖女    时间: 2015-2-8 06:22
代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。
作者: 海妖    时间: 2015-2-24 20:15
ASP.NET:ASP.net是Microsoft.net的一部分,作为战略产品,不仅仅是ActiveServerPage(ASP)的下一个版本;它还提供了一个统一的Web开发模型,其中包括开发人员生成企业级Web应用程序所需的各种服务。ASP.NET的语法在很大程度上与ASP兼容,同时它还提供一种新的编程模型和结构,可生成伸缩性和稳定性更好的应用程序,并提供更好的安全保护。
作者: 活着的死人    时间: 2015-3-7 13:40
同时也感谢博客园给我们这个平台,也感谢博客园的编辑们做成专题引来这么多高人指点。
作者: 深爱那片海    时间: 2015-3-15 07:33
能产生和执行动态、交互式、高效率的站占服务器的应用程序。运用ASP可将VBscript、javascript等脚本语言嵌入到HTML中,便可快速完成网站的应用程序,无需编译,可在服务器端直接执行。容易编写。
作者: 若相依    时间: 2015-3-22 00:02
asp.net空间的支持有:ASP.NET1.1/虚拟目录/MicrosoftFrontPage2000扩展/CDONTS,同时他的网站上也提供了Asp.net的使用详解和程序源代码,相信对使用ASP.NET编程的程序员来说会非常有用哦!




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2