仓酷云

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

[学习教程] 来一篇关于NET的.Net自界说控件之INamingContainer接口详解

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

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

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

x
完全不一样的。.net其实我也说不太清,.net可以把他理解为跟J2EE相对的工具。c++主要做系统相关的开发你要学.net的话就应该学C#。(其实微软在.NET平台上也考虑了给C++留一个地位。INamingContainer是一个没有任何办法和属性的接口,懂得这一接口,我们起首要分明.net中服务器控件的独一标记:控件ID。

作为控件利用者来讲,利用的最多的应当就是控件的ID了,实在任何一个服务器控件都有三个标识,分离是ClientID、ID与UniqueID。

三个标识注释以下:
ClientID:客户端ID,就是我们在页眼前台使用js取控件值时所用到的控件标识。
ID:我们在利用控件时为它赋于的一个标识,即我们给它定名的ID,而这个ID不管是在客户端仍是在服务器端都不会利用,它只是便利我们编程罢了。
UniqueID:服务端控件的标识,.net在服务器端搜刮控件时,就是利用UniqueID。

在分明了下面三个ID后,我们还必要晓得,在一个页面中,是不同意呈现不异的ID。不管是ClientID,仍是ID与UniqueID。

那末,.net是怎样来包管一个页面中一切的控件都不会发生不异的ID呢?好比,在一个复合控件中,我们为一个子控件设置了ID为button1。然后我们在页面中拖放了这个复合控件,那末.net在天生html页时,就会天生一个ID为button1的控件,假如我们在这个页面中再拖放一个这个复合控件,依照了解,那末在天生html页时,会再天生一个ID为button1的控件,如许,ClientID就反复了,而在asp.net,这是不同意的。

那末,.net中是怎样来处置这个成绩呢?这时候INamingContainer接口就上场了。

INamingContainer是一个没有任何办法和属性的接口,当自界说控件完成这个接口时,asp.net页框架将在这个控件下创立一个定名局限,为这个控件的一切子控件的ID加上"父控件+分开符"如许的前缀,这就能够使的在统一个页面中,一切的控件ID都不反复了。

我们能够用一个例子来考证这个成绩:
先创立一个名为ServerControl1的复合控件,代码以下:
namespaceINamingContainerControl
{
[DefaultProperty("Text")]
[ToolboxData("<{0}:ServerControl1runat=server></{0}:ServerControl1>")]
publicclassServerControl1:WebControl
{
protectedoverridevoidCreateChildControls()
{
TextBoxtextbox=newTextBox();
textbox.ID="textbox1";
this.Controls.Add(textbox);
}
}
}

能够看到,这个复合控件并没有承继INamingContainer接口,然后我们在一个aspx页面中放两个ServerControl1控件,再看这个aspx页面熟成的html代码以下:
<formname="form1"method="post"action="Default.aspx"id="form1">
<div>
<inputtype="hidden"name="__VIEWSTATE"id="__VIEWSTATE"value="/wEPDwUJMjYwNjA1NjY2ZGRfWPmkcbCTQZzDM9Iy18YcRqkh4w=="/>
</div>

<div>
<inputtype="hidden"name="__EVENTVALIDATION"id="__EVENTVALIDATION"value="/wEWAwL56q+LAQKsyrLrBgKsyrLrBpkl+pkIRqjolfXhcUP62HYpKeUo"/>
</div>

<spanid="ServerControl11"><inputname="textbox1"type="text"id="textbox1"/></span>
<spanid="ServerControl12"><inputname="textbox1"type="text"id="textbox1"/></span>


</form>

能够看到,页面中天生了两个id即是textbox1的控件。这是不同意的,由于假如存在两个id不异的控件时,我们在利用js的documnet.getElementById()办法取控件值时,便可能会取不准确的值。

上面我们修正ServerControl1控件,使之承继INamingContainer接口,代码以下:
namespaceINamingContainerControl
{
[DefaultProperty("Text")]
[ToolboxData("<{0}:ServerControl1runat=server></{0}:ServerControl1>")]
publicclassServerControl1:WebControl,INamingContainer
{
protectedoverridevoidCreateChildControls()
{
TextBoxtextbox=newTextBox();
textbox.ID="textbox1";
this.Controls.Add(textbox);
}
}
}

能够看到,这段代码与上段代码比拟,只是承继了INamingContainer接口,别的没有做任何改动。然后我们一样在一个aspx页面中放进两个ServerControl1控件,再看这个页面熟成的Html代码以下:
<formname="form1"method="post"action="Default.aspx"id="form1">
<div>
<inputtype="hidden"name="__VIEWSTATE"id="__VIEWSTATE"value="/wEPDwUJMjYwNjA1NjY2ZGRfWPmkcbCTQZzDM9Iy18YcRqkh4w=="/>
</div>

<div>
<inputtype="hidden"name="__EVENTVALIDATION"id="__EVENTVALIDATION"value="/wEWAwL56q+LAQL5/Pb7DQKUjsuiDnCm+0IPVDI3HZWQs46aZEI5tpWD"/>
</div>

<spanid="ServerControl11"><inputname="ServerControl11$textbox1"type="text"id="ServerControl11_textbox1"/></span>
<spanid="ServerControl12"><inputname="ServerControl12$textbox1"type="text"id="ServerControl12_textbox1"/></span>


</form>

能够看到,aspx页面中ServerControl1控件中的TextBox控件ID前都主动加上了前缀"ServerControl11_",name前也主动加上了"ServerControl11$"的前缀,另外一个ServerControl2控件中的TextBox控件ID分离加上了"ServerControl12_"与"ServerControl12$"的前缀,如许就包管了在统一个aspx页面中,每一个控件都具有分歧的id与name。

总结:InamingContainer接口的感化就是为懂得决一个页面中在利用多个自界说控件时ID大概会反复的成绩。如果需要重新编写代码,几乎任何一门计算机语言都可以跨平台了,还用得着Java嘛,而且像PHP/C#等语言不需要修改代码都可以跨Windows/Linux。
活着的死人 该用户已被删除
沙发
发表于 2015-1-18 13:37:52 | 只看该作者
ASP.net1.1和2.0在程序上的语法也有很大不同,现在2.0属于新出来的,不知道半年后会不会有3.0(说笑一下)。Windows2003系统自动支持ASP和ASP.net环境,不用安装任何程序。Asp.net属于编译语言。ASP的最大不同(ASP属于解释语言)。
小女巫 该用户已被删除
板凳
发表于 2015-1-26 15:00:08 | 只看该作者
Asp.net脚本的出现,为ASP空间带来了更高的稳定性,同时也为程序员建站提供更高环境!
谁可相欹 该用户已被删除
地板
发表于 2015-2-4 20:30:31 | 只看该作者
当然我们在选择Asp.net主机是,除了要考虑服务提供商在版本是否是实时更新以外,机房的环境和配置也是非常重要的,通常选择骨干网的机房,在速度和稳定性上会非常有保证。
柔情似水 该用户已被删除
5#
 楼主| 发表于 2015-2-10 07:21:55 | 只看该作者
当然我们在选择Asp.net主机是,除了要考虑服务提供商在版本是否是实时更新以外,机房的环境和配置也是非常重要的,通常选择骨干网的机房,在速度和稳定性上会非常有保证。
小魔女 该用户已被删除
6#
发表于 2015-3-1 04:29:03 | 只看该作者
Servlet的形式和前面讲的CGI差不多,它是HTML代码和后台程序分开的。它们的启动原理也差不多,都是服务器接到客户端的请求后,进行应答。不同的是,CGI对每个客户请求都打开一个进程(Process)。
爱飞 该用户已被删除
7#
发表于 2015-3-10 12:56:43 | 只看该作者
提供基于组件、事件驱动的可编程网络表单,大大简化了编程。还可以用ASP.NET建立网络服务。
飘飘悠悠 该用户已被删除
8#
发表于 2015-3-17 07:57:13 | 只看该作者
以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。
山那边是海 该用户已被删除
9#
发表于 2015-3-24 03:19:07 | 只看该作者
业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高,你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-2-23 07:13

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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