将代码隐藏 ASP.NET 网页转换为用户控件
(1)重命名 .aspx 文件,使其文件扩展名为 .ascx。
(2)根据代码隐藏文件使用的编程语言,重命名代码隐藏文件使其文件扩展名为 .ascx.vb 或 .ascx.cs。
(3)打开代码隐藏文件并将该文件继承的类从 Page 更改为 UserControl。
(4)在 .aspx 文件中,执行以下操作:
从该页面中移除 html、body 和 form 元素。
将 @ Page 指令更改为 @ Control 指令。
移除 @ Control 指令中除 Language、AutoEventWireup(如果存在)、CodeFile 和 Inherits 之外的 所有特性。
在 @ Control 指令中,将 CodeFile 特性更改为指向重命名的代码隐藏文件。
(5) 在 @ Control 指令中包含 className 特性。 这允许将用户控件添加到页面时对其进行强类型化。
以编程方式创建用户控件的实例(此部分从MSDN复制)
1.在用户控件中,请确保 @ Control 指令包含将类分配给用户控件的 ClassName 特性。下面的示例对 ClassName 特性进行设置以强类型化用户控件。<%@ Control className="MyUserControl" %>,此处className很重要是页面调用时后需要使用到的。
2.在要使用该用户控件的页中,通过 @ Reference 指令创建对该用户控件的引用。当以编程方式创建用户控件时,只有创建了对该控件的引用之后,ASP.NET 网页才能使用该用户控件的强类型。 例如,下面的代码创建对 MyUserControl.ascx 文件中所创建用户控件的引用。
3.示例:
<%@ Page Language="C#" %>
<%@ Reference Control="~/Controls/Spinner.ascx" %>
<script runat="server">
private ASP.Spinner Spinner1
protected void Page_Load(object sender, EventArgs e)
{
Spinner1 = (ASP.Spinner)LoadControl("~/Controls/Spinner.ascx");
}
protected void Button1_Click(object sender, EventArgs e)
{
PlaceHolder1.Controls.Add(Spinner1);
}
</script>
<html>
<head id="Head1" runat="server">
<title>Load User Control Programmatically</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:PlaceHolder runat="server" ID="PlaceHolder1" />
<br />
<asp:Button ID="Button1" runat="server"
Text="Click to Add User Control"
OnClick="Button1_Click" />
<br />
<br />
<asp:Label ID="Label1" runat="server" Text=""></asp:Label>
</div>
</form>
</body>
</html>
三、 添加属性和方法
可以采用定义页面的属性和方法时所用的方式定义用户控件的属性和方法。 通过定义用户控件的属性,就能以声明方式及利用代码设置其属性。添加属性
private string name;
public string Name
{
get{ return name;}
set{ name=value;}
}
和页面中定义属性和方法一样!添加事件:默认情况下,用户控件中的子控件引发的事件对于宿主页不可用。 但是,可以为用户控件定义事件并引发这些事件,以便将子控件引发的事件通知宿主页。 进行此操作的方式与定义任何类的事件一样,需要定义引发事件的类和委托定义。详细内容以后写委托和事件时候在写!
四、使用用户控件
- 在包含 ASP.NET 网页中,创建一个 @ Register 指令,在其中包括:
- 一个 TagPrefix 特性,该特性将前缀与用户控件相关联。 此前缀将包括在用户控件元素的开始标记中。
- 一个 TagName 特性,该特性将名称与用户控件相关联。 此名称将包括在用户控件元素的开始标记中。
- 一个 Src 特性,该特性定义包括的用户控件文件的虚拟路径。
注意用户控件不能位于APP_Code文件夹中。
- 在网页主体中,请在 form 元素内部声明用户控件元素。
- (可选)如果用户控件公开公共属性,请以声明方式设置这些属性。
MS的示例不算复杂,但是已经包含了很多基本知识。
最后附上MSDN示例代码