什么是Web User Control
如果你记得Microsoft公司先前在组建开发上的尝试,你一定很熟悉ActiveX控件或者ASP包含文件。这些控件和引用文件可以实现功能的分离和重用。ASP.NET Web User Control(网络用户控件)就是它们最新的成员。一个网络用户控件(Web User Control)就是一个独立的实体,它可以在其他的元素(elements)如Web窗体 (Web forms)中被调用。
大多数Web程序的一个公共元素就是导航条,一般放在页面的左侧。导航条在用户程序应用中往往被认为是静态的(或接近于静态),这对于导航条代码的编写是适得其反,这将大大影响你的开发时间。当你对导航条进行修改时这种副作用就更为严重,此时就是网络用户控件(Web User Control)大显身手的时候了。
独立的元素(elements)
网络用户控件(Web User Control)可能简单也可能复杂,这要根据你的需要来定夺。而且它也有可能包含一些其他网络用户控件(Web User Controls)。
下面这个简单的例子就可以显示出这些元素的强大功能和实用性,我将为一个非常简单的站点导航条元素(elements)建立一个用户控件(control)。导航条的内容是用HTML编写。
〈div style="FONT-WEIGHT: bold; MARGIN: 30px 0px 0px 50px; CURSOR: hand; COLOR: green; FONT-FAMILY: Georgia, 'Times New Roman', Serif; POSITION: static">
〈label>Navigation
〈div>
〈div style="FONT-WEIGHT: bold; MARGIN: 70px 0px 0px 50px; CURSOR: hand; COLOR: green; FONT-FAMILY: Georgia, 'Times New Roman', Serif; POSITION: static">
〈a href=" http://www.builderau.com.au/">BuilderAU.com.au
〈div>
〈div style="FONT-WEIGHT: bold; MARGIN: 110px 0px 0px 50px; CURSOR: hand; COLOR: green; FONT-FAMILY: Georgia, 'Times New Roman', Serif; POSITION: static">
〈a href=" http://www.zdnet.com.au">ZDNet Australia
〈div> 〈br>
通过使用基本HTML语言中的CSS方式来放置元素,导航条的内容包括两个链接和一个标题,网络用户控件(Web User Controls)的语句放在Web窗体(form)语句的后面,对整页的指令进行声明。
我们也可以使用下面的指令来完成我们的例子:
〈@ Control Language="c#" AutoEventWireup="false"
Codebehind="Navigation.ascx.cs"
Inherits="WebApplication1.Navigation" %>
这些语句紧跟在Web窗体(form)指令后。与word的控件不同,代码不是放在页面中。这个不同点是很重要的,因为我经常在进行控件代码的测试时要先在一个规则窗体(Web form)里验证结果。如果运行正确,就可以很容易地粘贴到一个网络用户控件Web User Control中。
控件(controls)的使用
控件满足你的要求之后,就可以在一个Web窗体(form)中使用这些控件。一种方法就是从解决方案管理器Solution Explorer拖放到Web窗体(form)模版中(假如你是使用Visual Studio .NET)。另外一种方法就是把它引入到Web窗体(form)的源文件里(在拖放时这些是被自动添加的)。控件在被使用前一定要先在页面中引用。下面就是注册指令的语句:
〈%@ Register TagPrefix="uc1"
TagName="Navigation" Src="Navigation.ascx" %>
注册语句的每一个属性如下:
* TagPrefix: 分配给用户控件的前缀,这允许你关联相关的控件并避免命名的冲突。
* TagName: 用户控件的名字,当添加一个控件到页面时使用这一属性。
* Src: 用户控件文件的路径,控件文件的扩展名是ascx,但在标准的ASP.NET 页面中为aspx 。
当控件注册成功后,你可以用与TagPrefix和TagName相同的标签名来使用它,接下来的例子就是使用我们的导航条控件。
〈uc1:Navigation id="Navigation1" runat="server">
〈/uc1:Navigation>
由于多个控件可能放置在一个页面中,另外有可能使用多个公共函数或属性,所以你应该注意它与注册指令的一致性。
另外一个问题就是控件在页面中的放置方式。我们的控件是使用CSS方式来放置它的元素(elements),页面中的元素也同样可以利用这种放置方式实现较好的布置。
应用展望
用户控件是一个极好的开发工具,一个程序不可能把它的各个属性赋予用户控件,但是其它的元素却可以实现这些功能。为了开发一个稳定的可升级的应用程序,你的开发小组就应该在开发阶段认真地检查这些元素。在工程开发的后期,把一个元素转化成一个用户控件最终将展示出它的高效性。
题外话
你可能会认为用户控件只不过是引入文件,但那并不符合实际情形,实际上开发者掌握了隐藏在控件代码后面的功能——动态地改变用户控件的元素(elements)(虽然引用文件是静态的)。