手机版

ASP.NET服务器控件开发(1)封装html

时间:2021-09-19 来源:互联网 编辑:宝哥软件园 浏览:

在我们的项目开发中,由于ASP.NET服务器控件的功能有限,我们经常自己定义特定的服务器控件来满足开发中的特定业务需求。有必要知道如何开发ASP.NET服务器控件。

事实上,简单实现ASP.NET服务器控制并不是很难。之前,丹尼尔在花园里介绍了相应的内容。在这里,站在巨人的肩膀上,我想分享一下开发ASP.NET服务器控件的方法和我自己的一些经验。写给新手,高手绕道。

个人认为最好的学习ASP的方法。NET的服务器控件开发就是自己去实践。当然,理论知识也很重要,但如果只看理论知识,可能会被里面的一些概念迷惑,看着看着就会睡着。如果我们自己创造自己的控制,效果就会不一样。

让我们通过一个例子来创建一个简单的服务器控件:

首先,我们创建一个类库项目SelfWebControl。在同一个解决方案中,我们正在创建一个ASP.NET Web应用程序(以测试我们的控件)。

name spaceselfwebcontrol { public class ControlA : control//control类定义了所有ASP.NET服务器控件共享的属性和方法}}我将从控件类继承controla类,该类是中所有控件的基类。NET,包括控件共享的属性和方法。

控制类

常见属性:

ClientID获取由ASP.NET生成的服务器控件标识符。

控件获取一个ControlCollection对象,该对象表示用户界面层次结构中指定服务器控件的子控件。

EnableViewState获取或设置一个值,该值指示服务器控件是否保持自己的视图状态以及它包含的任何子控件对请求客户端的视图状态。

ID获取或设置分配给服务器控件的编程标识符。

NamingContainer获取对服务器控件的命名容器的引用,这将创建一个唯一的命名空间来区分具有相同控件的服务器控件。标识属性值。

页面获取对包含服务器控件的页面实例的引用。

Parent获取对页面UI层次结构中服务器控件的父控件的引用。

Site获取服务器控件所属网站的信息(原文来自MSDN,但我认为是错误的,应该是指组件的“容器”网站,而不是web网站)。

模板源目录获取包含当前服务器控件的页面或用户控件的虚拟目录。

UniqueID获取服务器控件的唯一的、分层定义的标识符。

Visible获取或设置一个值,该值指示服务器控件是否在页面上呈现为用户界面。

常用方法:

DataBind将数据源绑定到被调用的服务器控件及其所有子控件。

Dispose使服务器控件能够在从内存中释放之前执行最终的清理操作。

Equals(从对象继承)被重载。确定两个对象实例是否相等。

FindControl被重载。在当前命名容器中搜索指定的服务器控件。

GetHashCode(从Object继承)用作特定类型的哈希函数,适合在哈希算法和哈希表等数据结构中使用。

获取类型(从对象继承)获取当前实例的类型。

HasControls确定服务器控件是否包含任何子控件。

RenderControl将服务器控件的内容输出到提供的HtmlTextWriter对象;如果启用了跟踪,则存储关于控件的跟踪信息。

解析器根据传递给模板源目录属性的值,将相对网址解析为绝对网址。

ToString(从对象继承)返回表示当前对象的字符串。

公共活动:

当服务器控件绑定到数据源时,就会发生数据绑定。

当服务器控件从内存中释放时,发生Disposed,这是请求ASP.NET页时服务器控件生存期的最后一个阶段。

初始化发生在服务器控件初始化时;初始化是控件生命周期的第一步。控件应执行创建和设置实例所需的任何初始化步骤。视图状态信息不能用于此事件;还没有填满。在此事件的生存期内,不应访问任何其他服务器控件,无论它是此控件的子控件还是父控件。可能无法创建或访问其他服务器控件。

当加载服务器控件加载到页面对象中时发生。通知服务器控件执行设置为每个页面请求都会发生的任何处理步骤。开发人员可以访问视图状态信息,并使用此事件来形成POST数据。您还可以访问页面控件层次结构中的其他服务器控件。

当服务器控件将要呈现给它包含的Page对象时,会发生PreRender。在服务器控件呈现到页面输出之前,使用此事件执行任何更新。您可以在事件的生存期内保存对服务器控件的视图状态的任何更改。不要保存渲染阶段所做的相同更改。

当服务器控件从内存中卸载时发生卸载。

受保护的属性:

获取一个值,该值指示服务器控件的子控件是否已创建。

上下文获取与当前网站请求的服务器控件关联的HttpContext对象。

事件获取控件的事件处理程序委托列表。此属性是只读的。

HasChildViewState获取一个值,该值指示当前服务器控件的子控件是否具有任何已保存的视图状态设置。

IsTrackingViewState获取一个值,该值指示服务器控件是否保存对其视图状态的更改。

ViewState获取状态信息的字典,它使您能够在同一页面上的多个请求之间保存和恢复服务器控件的视图状态。

ViewStateIgnoresCase获取一个值,该值指示StateBag对象是否不区分大小写。

受保护的方法:

AddParsedSubObject通知服务器控件某个元素(XML或HTML)已被解析,并将该元素添加到服务器控件的ControlCollection对象中。

ClearChildViewState删除服务器控件所有子控件的视图状态信息。

CreateChildControls告诉您使用基于组合实现的服务器控件来创建它们包含的任何子控件,为回发或呈现做准备。

CreateControlCollection创建一个新的ControlCollection对象来保存服务器控件的子控件(包括文本控件和服务器控件)。

确定服务器控件是否包含子控件。如果没有,请创建子控件。

完成(从对象继承)已被覆盖。在垃圾收集回收对象之前,允许对象尝试释放资源并执行其他清理操作。

IsLiteralContent确定服务器控件是否只包含文字内容。Asp.net页面中的普通html标签被ASP.NET编译成一个LiteralContent控件(意思是轻量级控件)。

loadstate请求从SaveViewState方法保存的上一页恢复视图状态信息。

如果发出请求的服务器控件有足够的安全权限读取映射结果,MapPathSecure将检索相对于源文件的映射物理文件路径。

成员克隆(从对象继承)创建当前对象的浅拷贝。

OnBubbleEvent确定服务器控件的事件是否在页面的用户界面服务器控件层次结构中向上传递。

OnDataBinding引发数据绑定事件。

OnInit引发Init事件。

加载时引发加载事件。

OnPreRender引发PreRender事件。

Onload引发卸载事件。请注意,在服务器控件生命周期的这个阶段,服务器控件应该执行所有最终的清理操作,例如关闭文件、关闭数据库连接和丢弃对象。

RaiseBubbleEvent将所有事件源及其信息分配给控件的父级。

渲染将服务器控件内容发送到提供的HtmlTextWriter对象,该对象写入要在客户端渲染的内容。

RenderChildren将服务器控件的子控件的内容输出到提供的HtmlTextWriter对象,该对象写入要在客户端呈现的内容。

SaveViewState保存自页面发布回服务器后发生的任何服务器控件视图状态更改。

TrackViewState导致跟踪服务器控件的视图状态的更改,以便这些更改可以存储在服务器控件的StateBag对象中。您可以通过控件访问此对象。ViewState属性。

在这里,我们希望重写Render方法,通过HtmlTextWriter对象显示控件的内容。

name spaceselfwebcontrol { public class control a : control//control类定义了所有ASP.NET服务器控件共享的属性和方法{ protected override void render(html text writer writer){ writer . write(' table style=' width :300 px;高度:200 px;背景色-color : bisque ' ');作家。write(' tr ');作家。Write('td这是第一列/TD ');作家。写(' td这是第二列/TD ');作家。写(' td这是第三列/TD ');作家。write('/tr ');作家。write('/table ');}}}当生成我们的SelfWebControl项目并切换到ASP.NET应用程序的工具箱时,VS2008会自动将我们刚刚创建的ControlA添加到工具箱中,避免了之前通过选择项来添加控件的过程。

这样,我们以最简单的形式实现了一个ASP.NET服务器控件。但是如果我想改变桌子的宽度、高度和背景颜色,怎么改变呢?

这要求我们定义服务器控件的属性。众所周知,ASP。NET的服务器控件有很多属性,而我们当前的控件只有几个常见的属性。

让我们看看我们所做的改变:

public class control a : control//control类定义了所有ASP.NET服务器控件共享的属性和方法{ private int _ tWidthprivate int _ tHeight私有字符串_ bgColor[Browsable(true)]//是否[Category('Appearance')]//属性的分类,如行为和外观,可以在属性窗口中看到[DefaultValue(100)]//属性的默认值[Description(' table width ')]//这些都显示在属性窗口中。}设置{ _ tWidth=值;} }[可浏览(true)][类别('外观')][默认值(100)][描述('表格高度')]public int height { get { return _ height;}设置{ _tHeight=值;} }[可浏览(true)][类别('外观')][默认值('浓汤')][说明('表格背景色')]公共字符串bgcolor { get { return _ bgcolor}设置{ _bgColor=值;} }受保护的覆盖void Render(HtmlTextWriter编写器){ writer。write(' table style=' width : ' TWITTH ' px;height: ' tHeight ' pxbackground-color : ' bgColor ' ');作家。write(' tr ');作家。Write('td这是第一列/TD ');作家。写(' td这是第二列/TD ');作家。写(' td这是第三列/TD ');作家。write('/tr ');作家。write('/table ');}}代码很简单,大家都能看懂。值得注意的是每个属性的声明。需要引用命名空间:usingsystem组件模型;我已经解释了代码中每个标签的功能,所以我们给控件添加了属性。

此外,如果我们想在将控件拖到页面时自动在标记中添加一些属性,我们需要添加以下代码:

复制的代码如下:[toolbox data(' { 0 } : control a runat=' server ' bgcolor=' red '今夜=' 200 ' twidth=' 300 '/{ 0 } : control a ')]

值得注意的是,这里的写法是{0}冒号后的‘ControlA’是类名,不要写错了。并且runat='sever '必须被写入。

很简单吗?这样,我们只需封装简单的html即可完成ASP.NET控件的制作。

总结:制作一个ASP.NET服务器控件非常简单,但是仅仅通过html输出它有时是没有意义的。这里只是一个方法和思路。打开学习定制自己的ASP.NET控件的第一扇门。在以后的文章中,我将介绍ASP.NET控件继承网络控件的发展。

版权声明:ASP.NET服务器控件开发(1)封装html是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。