3、调用用户控件
只有当包括在WEB窗体页中时,用户控件才可以工作。当一个请求到达某一页而该页包含用户控件时,该用户控件将经历任何服务器控件所要经历的所有处理阶段。
在 WEB 窗体页中包括用户控件的方法很简单。
在要包含用户控件的 WEB 窗体页中,声明一个@Register指令,该指令包括:
tagprefix属性,该属性将前缀与用户控件相关联。此前缀将包括在用户控件元素的开始标记中。
tagname属性,该属性将名称与用户控件相关联。此名称将包括在用户控件元素的开始标记中。
Src属性,该属性定义要包括在WEB窗体页中的用户控件文件的虚拟路径。
例如,以下代码将注册在文件LoginForm.ascx中定义的用户控件。该控件还被指定有标记前缀Acme和标记名称Login。
<%@ Register TagPrefix="Acme" TagName="LoginForm" Src=".\LoginForm.ascx" %>
使用自定义服务器控件语法在HtmlForm服务器控件的开始标记和结束标记之间 (<form runat=server></form>) 声明该用户控件元素。例如,要声明在上一步导入的控件,使用以下语法。
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="logintest.aspx.vb" Inherits="logintest.WebForm1"%> <%@ Register TagPrefix="Acme" TagName="LoginForm" Src=".\LoginForm.ascx" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <title>WebForm1</title> <meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.0"> <meta name="CODE_LANGUAGE" content="Visual Basic 7.0"> <meta name="vs_defaultClientScript" content="JavaScript"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> </HEAD> <body MS_POSITIONING="GridLayout"> <form id="Form1" method="post" runat="server"> <Acme:LoginForm id=" LoginForm " runat="server"/> </form></BODY> </HTML> |
【注意】无论在WEB窗体页上包括了多少个ASP.NET服务器控件(用户控件和其他任何控件),都应只在WEB窗体页上包括一个HtmlForm服务器控件。此控件的开始和结束标记之间应包括所有服务器控件。
通过上面的程序,在logintest.aspx页中调用了名为loginform.ascx的用户控件,结果如下图所示:
4、用户控件使用小结 (1)用户控件使开发人员能够使用编写WEB窗体页的相同编程技巧轻松地定义自定义控件。 作为约定,用.ascx文件扩展名指示这样的控件。这样可以确保用户控件文件不能作为独立的WEB窗体页执行。
(2)用户控件通过Register指令包括在另一WEB窗体页中,该指令指定TagPrefix、TagName和Src location。
(3)注册了用户控件后,可以像普通的服务器控件那样将用户控件标记放置在WEB窗体页中(包括runat="server"属性)。在包含WEB窗体页中将用户控件的公共字段、属性和方法提升为该控件的公共属性(标记属性)和方法。
(4)用户控件参与每个请求的整个执行生存期,并且可以处理自己的事件,封装来自包含WEB窗体页的一些页逻辑。
(5)用户控件不应包含任何窗体控件,而应依靠其包含WEB窗体页在必要时包括窗体控件。
(6)可以使用System.WEB.UI.Page类的LoadControl方法以编程方式创建用户控件。用户控件的类型由ASP.NET运行库决定,遵循约定文件名_扩展名。
(7)只有当为用户控件包括了Register指令时,用户控件的强类型才能由包含WEB窗体页使用(即使没有实际声明的用户控件标记)。
5、结束语 在编写WEB应用程序时,如果将可能重复出现的元素都用用户控件来实现,那将大大减少维护代码的代价。而且在修改代码时,记得修改一段代码却忘了修改另一段同样代码的情况也将不存在了。代码越短,出现错误的因素越少,出现错误的可能性就越小。
查看本文来源