閱讀英文

共用方式為


操作使用者控制項屬性

一旦您已經建立使用者控制項,並且在該控制項上指定屬性,就可以從包含使用者控制項的網頁中,用宣告方式和程式設計方式來變更那些屬性值。當您將使用者控制項加入至其他使用者控制項 (稱為巢狀) 時,也可以使用這些技巧。

安全性提示   請避免將使用者名稱和密碼等敏感資訊儲存為使用者控制項的屬性。

若要宣告性操作使用者控制項屬性值

  • 在使用者控制項標記中,將使用者控制項的屬性名稱和值宣告為屬性/值配對。在下列範例中,ColorText 是由 Acme:Login 自訂伺服器控制項標記建立的使用者控制項執行個體的屬性。Color 設定為 blue,而 Text 則設定為 This is a sample

    <Acme:Login Color="blue" Text="This is a sample." Runat="server" />
    

若要用程式設計方式操作使用者控制項的屬性值

  1. 建立帶有屬性的使用者控制項和 ASP.NET 伺服器控制項或 HTML 項目,來顯示屬性值。下列範例是使用 <span> 項目來顯示 ColorText 屬性值。

    <script runat="server">
        Public Color As String = "blue"
        Public Text As String = "This is a simple message user control!"  
    </script>
    
    <span id="Message" style="color:<%=Color%>"><%=Text%></span>
    [C#]
    <script language="C#" runat="server">
        public String Color = "blue";
        public String Text = "This is a simple message user control!";
    </script>
    
    <span id="Message" style="color:<%=Color%>"><%=Text%></span>
    
  2. 使用 @ Register 指示詞在包含的網頁或使用者控制項中註冊使用者控制項,這個指示詞會定義使用者控制項的 tagnametagprefix 以及使用者控制項檔案的路徑。如需如何以程式設計方式將使用者控制項包含在網頁或其他使用者控制項中的詳細資訊,請參閱以程式設計方式建立使用者控制項的執行個體

  3. 在網頁的程式碼宣告區塊中,建立操作使用者控制項屬性的程式碼。

  4. 在包含的網頁或使用者控制項主體中,加入您要參與操作使用者控制項屬性的其他任何 ASP.NET 伺服器控制項。例如,您可以包含 DropDownList Web 伺服器控制項或 HtmlSelect 伺服器控制項,然後從中選取操作 Color 屬性的色彩。

    下列範例所示範的網頁會操作步驟 1 所介紹的使用者控制項。

    <%@ Register TagPrefix="Acme" TagName="Message"    Src="simpleusercontrol.ascx" %>
    
    <html>
    
        <script language="VB" runat="server">
            Sub SubmitBtn_Click(sender As Object, E As EventArgs)
                MyMessage.Text = "Message text changed!"
                MyMessage.Color = "red"
            End Sub 'SubmitBtn_Click
        </script>
        <body style="font: 10pt verdana">
            <h3>A Simple User Control w/ Properties</h3>
            <form runat="server">
                <Acme:Message id="MyMessage" Text="This is a custom message!" Color="blue" runat="server"/>
                <p>
                <asp:button text="Change Properties" OnClick="SubmitBtn_Click" runat=server/>
    
            </form>
        </body>
    </html>
    [C#]
    <%@ Register TagPrefix="Acme" TagName="Message"    Src="simpleusercontrol.ascx" %>
    
    <html>
    
        <script language="C#" runat="server">
                void SubmitBtn_Click(Object sender, EventArgs E) {
                        MyMessage.Text = "Message text changed!";
                        MyMessage.Color = "red";
                }
        </script>
    
    <body style="font: 10pt verdana">
        <h3>A Simple User Control w/ Properties</h3>
        <form runat="server">
            <Acme:Message id="MyMessage" Text="This is a custom message!" Color="blue" runat="server"/>
            <p>
            <asp:button text="Change Properties" OnClick="SubmitBtn_Click" runat=server/>
    
        </form>
    </body>
    </html>
    

雖然從宣告式網頁或使用者控制項中操作使用者控制項與從程式碼後置 (Code-Behind) 網頁或使用者控制項類別中操作使用者控制項有許多類似之處,但是仍然有一些顯著的差異。特別是,如果您是使用程式碼後置類別來建立包含的網頁或使用者控制項,那麼就像是所有快速應用程式開發 (RAD) 設計工具一樣,您也要同時建立要與程式碼後置類別一起使用的使用者控制項。這麼做可以清楚區分出程式碼檔案與用來呈現 HTML 給要求用戶端的檔案 (.aspx 和 .ascx 檔案)。如需詳細資訊,請參閱在程式碼後置的檔案中開發使用者控制項

注意   下列程序中的範例是將<若要用程式設計方式操作使用者控制項的屬性>程序中範例修改後的結果。程式碼已修改成可用於程式碼後置檔案。

若要從程式碼後置檔案中用程式設計方式操作使用者控制項的屬性值

  1. 在程式碼後置檔案中,建立使用者控制項程式碼,其中包含您要操作的屬性。下列範例就是上述程序中簡單使用者控制項的修改結果。

    Imports System
    Imports System.Web.UI
    Imports System.Web.UI.HtmlControls
    
    Namespace UserControlTest
        Public Class MyUserControl
            Inherits UserControl
             Public Color As String = "blue"
             Public [Text] As String = "This is a simple message user control!"
        End Class 'MyUserControl
    End Namespace 'UserControlTest
    [C#]
    using System;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    
    namespace UserControlTest {
        public class MyUserControl : UserControl {
            public string Color = "blue";
            public string Text = "This is a simple message user control!";
        }
    }
    
  2. 在另一個程式碼後置檔案中,建立包含的網頁或使用者控制項,它將會操作使用者控制項的屬性值。基於這個範例的目的,將這個程式碼儲存在 MyPage 檔案中,並加上適當的語言副檔名。

    Imports System
    Imports System.Web.UI
    Imports System.Web.UI.WebControls
    Imports UserControlTest
    
    Namespace PageTest
        Public Class MyPage
            Inherits Page
            Public mybutton As Button
            Public MyMessage As MyUserControl
            Public Placeholder As PlaceHolder
    
            Sub Page_Load(sender As [Object], e As EventArgs)
                Dim MyMessage As Control = LoadControl("uc.ascx")
                Placeholder.Controls.Add(MyMessage)
    
                Dim mybutton As New Button()
                mybutton.Text = "Change property values"
                mybutton.OnClick = "SubmitBtn_Click"
                Placeholder.Controls.Add(mybutton)
            End Sub 'Page_Load
    
            Protected Sub SubmitBtn_Click(sender As [Object], e As EventArgs)
                MyMessage.Text = "Message text changed!"
                MyMessage.Color = "red"
            End Sub 'SubmitBtn_Click
        End Class 'MyPage
    End Namespace 'PageTest
    [C#]
    using System;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using UserControlTest;
    
    namespace PageTest {
        public class MyPage : Page {
            public Button mybutton;
            public MyUserControl MyMessage;
            public PlaceHolder Placeholder;
    
            void Page_Load(Object sender, EventArgs e) {
                Control MyMessage = LoadControl("uc.ascx");
                Placeholder.Controls.Add(MyMessage);
    
                Button mybutton = new Button();
                mybutton.Text = "Change property values";
                mybutton.OnClick = "SubmitBtn_Click";
                Placeholder.Controls.Add(mybutton);
            }
    
            protected void SubmitBtn_Click(Object sender, EventArgs e) {
                MyMessage.Text = "Message text changed!";
                MyMessage.Color = "red";
            }
        }
    }
    
  3. 將使用者控制項程式碼後置檔案和包含的網頁或使用者控制項的程式碼後置檔案編譯到組件中。您必須確定包含的網頁或使用者控制項可以存取您正在使用的使用者控制項程式碼。編譯網頁或包含的使用者控制項時,您可以將它們編譯到相同的 .dll 檔案中,或是在命令列上使用下列編譯器 (Compiler) 指令。在下列範例中,uc.dll 代表從使用者控制項原始程式檔 (Source File) 編譯而來的 DLL。

    **注意   **下列編譯器命令列指令假設您是要從原始程式檔所在的目錄進行編譯,而且也假設您是要編譯到 \bin 目錄中。在上述情形中,\bin 目錄是原始程式檔 (Source File) 所在目錄的子目錄。

    vbc /r:.\bin\uc.dll /target:library /out:.\bin\p.dll MyPage.vb
    [C#]
    csc /r:.\bin\uc.dll /target:library /out:.\bin\p.dll MyPage.cs
    
  4. 如果您還沒有這麼做,請一定要先確定您建立的所有 .dll 檔案都是儲存在應用程式的 \bin 目錄中,這樣才能將類別自動連結到相關聯的 .aspx 或 .ascx 檔案。

  5. 建立適當的 .aspx 和 .ascx 檔案。請記得將 PlaceHolder 伺服器控制項包含在 .aspx 檔案中。這個控制項會包含由網頁程式碼後置 (Code-Behind) DLL 中宣告的控制項所動態產生的 UI。也會包含您所撰寫網頁和使用者控制項程式碼的所有 HTML 必要項目。

    **注意   **在這個案例中,請不要在 @ Control@ Page 指示詞中使用 src 屬性。因為您會從組件繼承這兩個類別,因此只要使用 Inherits 屬性就行了。此外,如果您是在命名空間 (Namespace) 中開發網頁和使用者控制項,必須將命名空間的名稱包含在 Inherits 屬性值中。

    下列範例示範的是前述各範例中使用者控制項的 .ascx 檔案和網頁的 .aspx 檔案。

    .ascx 檔案:

    <%@ Control Inherits="UserControlTest.MyUserControl" %>
    <span id="Message" style="color:<%=Color%>"><%=Text%></span>
    

    .aspx 檔案:

    <%@ Import Namespace="PageTest" %>
    <%@ Page language="VB" Inherits="PageTest.MyPage" %>
    <%@ Reference control="uc.ascx" %>
    
    <html>
    
        <body style="font: 10pt verdana">
            <h3>A Simple User Control w/ Properties</h3>
            <form runat="server">
    
                <asp:placeholder id="Placeholder" runat="server" />
    
            </form>
        </body>
    </html>
    [C#]
    <%@ Import Namespace="PageTest" %>
    <%@ Page language="C#" Inherits="PageTest.MyPage" %>
    <%@ Reference control="uc.ascx" %>
    
    <html>
    
        <body style="font: 10pt verdana">
            <h3>A Simple User Control w/ Properties</h3>
            <form runat="server">
    
                <asp:placeholder id="Placeholder" runat="server" />
    
            </form>
        </body>
    </html>
    

請參閱

Web Form 使用者控制項 | 在另一個 Web Form 網頁中包含使用者控制項 | Web Form 網頁中的伺服器事件處理 | 處理使用者控制項事件