仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 722|回复: 8
打印 上一主题 下一主题

[学习教程] NET网页编程之详解ASP.NET自界说控件开辟实例

[复制链接]
飘飘悠悠 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 14:27:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 10:37

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表