HOW TO:以程式設計方式建立 ASP.NET 使用者控制項的執行個體
更新:2007 年 11 月
就像是您可以使用程式設計方式,在 ASP.NET 網頁上建立任何伺服器控制項的執行個體,您也可以藉由使用者控制項達到相同目的。
若要以程式設計方式建立使用者控制項的執行個體
在使用者控制項中,請確認 @ Control 指示詞包含將類別指派給使用者控制項的 ClassName 屬性。
下列程式碼範例會設定 ClassName 屬性以強型別使用者控制項。
<%@ Control className="MyUserControl" %>
在想要使用使用者控制項的網頁上,藉由 @ Reference 指示詞建立使用者控制項的參考。
以程式設計方式建立使用者控制項時,只有在您建立使用者控制項的強型別參考後,ASP.NET Web 網頁才能使用它。例如,下列程式碼會建立 MyUserControl.ascx 檔中所建立的使用者控制項參考。
<%@ Reference Control="MyUserControl.ascx" %>
注意事項:
當您想要以程式設計方式載入控制項時,可以使用 @ Reference。當您以宣告方式將使用者控制項加入網頁時,可以使用 @ Register 指示詞。如需詳細資訊,請參閱 HOW TO:在 ASP.NET Web 網頁中包含使用者控制項。
使用控制項的類別名稱,建立使用者控制項的執行個體變數。類別會是 ASP 命名空間的一部分。
例如,如果您想要建立宣告為類別 Spinner 的使用者控制項執行個體,可以使用如下列的語法:
Protected Spinner1 As ASP.Spinner
Protected ASP.Spinner Spinner1;
藉由呼叫 LoadControl 方法在程式碼中建立使用者控制項的執行個體。
視需要指派屬性值,然後將控制項加入網頁上容器的 ControlCollection 集合,例如 PlaceHolder 控制項。
注意事項:
當您使用 Add 方法將控制項加入 ControlCollection 物件時,它們會依照被處理的順序放在集合中。如果您想要將控制項加入集合中的特定位置,請使用 AddAt 方法,並指定想要儲存控制項的索引位置。
範例
下列程式碼範例,示範了以程式設計方式載入使用者控制項的 ASP.NET Web 網頁。網頁包含 @ Reference 指示詞以指定控制項的檔案。LoadControl 方法會讀取檔案,然後將其具體化為能夠加入網頁的控制項。
<%@ Page Language="VB" %>
<%@ Reference Control="~\Controls\Spinner.ascx" %>
<script >
Private Spinner1 As ASP.Spinner
Protected Sub Page_Load(ByVal sender As Object, _
ByVal e As System.EventArgs)
Spinner1 = CType(LoadControl("~\Controls\Spinner.ascx"), _
ASP.Spinner)
' Set MaxValue first.
Spinner1.MaxValue = 20
Spinner1.MinValue = 10
PlaceHolder1.Controls.Add(Spinner1)
End Sub
Protected Sub Button1_Click(ByVal sender As Object, _
ByVal e As System.EventArgs)
Label1.Text = Spinner1.CurrentNumber.ToString()
End Sub
</script>
<html>
<head id="Head1" >
<title>Load User Control Programmatically</title>
</head>
<body>
<form id="form1" >
<div>
<asp:PlaceHolder runat=server ID="PlaceHolder1" />
<br />
<asp:Button ID="Button1"
Text="Button"
OnClick="Button1_Click" />
<br />
<br />
<asp:Label ID="Label1" Text=""></asp:Label>
</div>
</form>
</body>
</html>
<%@ Page Language="C#" %>
<%@ Reference Control="~/Controls/Spinner.ascx" %>
<script >
private ASP.Spinner Spinner1;
protected void Page_Load(object sender, EventArgs e)
{
Spinner1 = (ASP.Spinner)LoadControl("~/Controls/Spinner.ascx");
// Set MaxValue first.
Spinner1.MaxValue = 20;
Spinner1.MinValue = 10;
PlaceHolder1.Controls.Add(Spinner1);
}
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = Spinner1.CurrentNumber.ToString();
}
</script>
<html>
<head id="Head1" >
<title>Load User Control Programmatically</title>
</head>
<body>
<form id="form1" >
<div>
<asp:PlaceHolder runat=server ID="PlaceHolder1" />
<br />
<asp:Button ID="Button1"
Text="Button"
OnClick="Button1_Click" />
<br />
<br />
<asp:Label ID="Label1" Text=""></asp:Label>
</div>
</form>
</body>
</html>