|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
Java欺骗了我们那么多年,如今的多核时代,我认为它气数已尽!本文经由过程完成一个服务端控件来说解一下控件开辟,该控件的功效以下:
1.显现服务端工夫,其实不停更新
2.经由过程手动点击革新按钮以AJAX猎取服务端最新工夫
3.能拖动
4.能记着在页面上的地位,页面回传后地位稳定
5.能设置一个准时工夫,一到这个工夫,主动回传触发用户自界说的事务,
起首新建一个类库项目HampWebControl,再新建一个类叫TipTime1,承继WebControl类。假如不是从已有控件中承继,一样平常就承继WebControl类,它是一切ASP.NET服务端控件的基类。
我们编译这个项目,再新建一个网站项目,援用HampWebControl项目,新建页面,在工具箱中拖一个TipTime1控件到页面上。
我们运转该页面,就会发明HTML代码以下:
就是说默许是出现成一个span标签,能够经由过程重载WebControl基类的TagKey属性来改动。
如许出现在页面上就是个DIV。HtmlTextWriterTag是个列举,包括了良多HTML标签。
WebControl基类的Render用来出现内容,重载它即可以往页面上出现任何自界说的标签。
如许在页面上就显现了一个a标签,以下图所示:
注重看,这时候a标签是在DIV表面,怎样将它放到DIV内里呢?这就要重载WebControl基类的RenderContents办法
如许这个a标签就在div内里了,以下图所示:
接上去为最核心的DIV加一些款式,重载基类的AddAttributesToRender办法
这里有两种写法,使用HtmlTextWriterStyle列举大概间接写CSS属性名。
到这里人人懂得了自界说控件怎样出现在页面上。我们再新建一个类TipTime2,把仍旧重载TagKey为DIV,然后重载RenderContents,显现一个span标签与一个input标签。
如许页面上显现了以后服务真个工夫与一个按钮,如图所示:
接上去我们来让用户能够设置按钮上的笔墨,为类TipTime2增添一个Text属性:
同时将出现按钮的代码改成:
如许Text属性便呈现在计划视图的属性窗口。
修正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办法,用以从头绑定事务,这是为懂得决回传后的成绩。
如今控件出现成HTML的布局是<div><span/><input/></div>,有3个标签,我们必要用3个变量来分离存储它们的DOM工具,便利今后操纵。
背景对HTML标签定名时以以后控件的ClientID开首,前面依据必要加后缀,如许能够必定水平上避免标签重名。由背景将控件的ClientID传过去,如许即可以猎取一切DOM工具。拖动效果使用的是现成js办法,属于纯javascript效果,这里就不睁开会商了,有乐趣的童鞋能够检察示例项目源码。
该办法是由背景注册剧本来挪用的,假如在数组中已存在就取该工具,不然从头new一个。并挪用初始化与绑定事务办法。
这时候必要在背景注册该js文件才行。关头的操纵时将该文件的“天生操纵”属性设置为“嵌进的资本”,使得编译的时分该js文件会作为DLL文件的一部分。
接上去必要声明所需的资本文件,严厉按文件夹的布局来定名。这里注册了2个JS文件:公用JS文件__WebControlBase.js与控件公用的JS文件TipTime2.js。
然后在代码中注册剧本便可。
在《道不远人深切剖析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),我一同学说,你应该早就有作品啦。我惶惶然…… |
|