Verändern der Eigenschaften von Benutzersteuerelementen
Nachdem Sie ein Benutzersteuerelement erstellt und Eigenschaften dafür angegeben haben, können Sie für die Seite, die das Benutzersteuerelement enthält, die Werte dieser Eigenschaften sowohl deklarativ als auch programmgesteuert ändern. Außerdem können diese Verfahren auch anwendet werden, wenn Benutzersteuerelemente zu anderen hinzugefügt werden, wodurch eine so genannte Verschachtelung entsteht.
Sicherheitshinweis Vermeiden Sie es, vertrauliche Informationen wie Benutzernamen und Kennwörter als Eigenschaften eines Benutzersteuerelements zu speichern.
So verändern Sie Eigenschaftenwerte von Benutzersteuerelementen deklarativ
Deklarieren Sie den Eigenschaftennamen und einen Wert als Attribut/Wert-Paar im Tag des Benutzersteuerelements. Im folgenden Beispiel sind
Color
undText
Eigenschaften einer Instanz des Benutzersteuerelements, die vom benutzerdefinierten ServersteuerelementtagAcme:Login
erstellt wurde.Color
wird aufblue
festgelegt, undText
wird aufThis is a sample
festgelegt.<Acme:Login Color="blue" Text="This is a sample." Runat="server" />
So verändern Sie Eigenschaftenwerte von Benutzersteuerelementen programmgesteuert
Erstellen Sie ein Benutzersteuerelement mit Eigenschaften und ein ASP.NET-Serversteuerelement oder HTML-Element für die Anzeige der Eigenschaftenwerte. Im folgenden Beispiel wird für die Anzeige der Eigenschaftenwerte von
Color
undText
ein<span>
-Element verwendet.<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>
Registrieren Sie das Benutzersteuerelement durch eine @ Register-Direktive auf der Seite bzw. in dem Benutzersteuerelement, in dem es enthalten ist. Definieren Sie außerdem tagname und tagprefix des Benutzersteuerelements sowie den Pfad zur dazugehörigen Datei. Weitere Informationen zum programmgesteuerten Integrieren eines Benutzersteuerelements in eine Seite oder in ein anderes Benutzersteuerelement finden Sie unter Programmgesteuertes Erstellen von Instanzen der Benutzersteuerelemente.
Erstellen Sie im Codedeklarationsblock der Seite den Code, mit dem die Eigenschaften des Benutzersteuerelements verändert werden sollen.
Fügen Sie in den Textkörper der Seite bzw. des Benutzersteuerelements, in dem das zu verändernde Benutzersteuerelement enthalten ist, beliebige andere ASP.NET-Serversteuerelemente ein, mit denen die Eigenschaften des Benutzersteuerelements ebenfalls verändert werden können. Beispielsweise könnten das Webserversteuerelement DropDownList oder ein HtmlSelect-Serversteuerelement eingefügt werden, mit denen eine Farbe ausgewählt und die
Color
-Eigenschaft verändert wird.Im folgenden Beispiel wird eine Seite gezeigt, mit der das im ersten Schritt eingeführte Benutzersteuerelement verändert wird.
<%@ 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>
Obwohl es viele Ähnlichkeiten bei der Bearbeitung der Eigenschaften von Benutzersteuerelementen von einer deklarativen Seite (bzw. einem Benutzersteuerelement) und einer CodeBehind-Seite (bzw. einer Benutzersteuerelementklasse) aus gibt, bestehen auch signifikante Unterschiede. Wenn beim Erstellen der Seite bzw. des Benutzersteuerelements, die das fragliche Benutzersteuerelement enthalten sollen, eine CodeBehind-Klasse verwendet wird, muss, wie bei der RAD (Rapid Application Development)-Entwicklung üblich, das geplante Benutzersteuerelement ebenfalls mit einer CodeBehind-Klasse erstellt werden. Dadurch wird eine klare Trennlinie zwischen den Codedateien und den Dateien gezogen, die zum Erzeugen des HTML-Codes für den anfordernden Client (ASPX- und ASCX-Dateien) verwendet werden. Weitere Informationen finden Sie unter Entwickeln von Benutzersteuerelementen in einer Codebasisdatei.
Hinweis Bei den im folgenden Verfahren verwendeten Beispielen handelt es sich um Modifikationen der Beispiele zum Verfahren So verändern Sie Eigenschaften von Benutzersteuerelementen programmgesteuert. Der Code wurde so angepasst, dass er für CodeBehind-Dateien verwendet werden kann.
So verändern Sie die Eigenschaftenwerte von Benutzersteuerelementen programmgesteuert über eine CodeBehind-Datei
Erstellen Sie in einer CodeBehind-Datei den Code für ein Benutzersteuerelement mit den entsprechenden Eigenschaften, die dann verändert werden sollen. Bei dem folgenden Beispiel handelt es sich um eine Anpassung des einfachen Benutzersteuerelements aus dem vorherigen Verfahren.
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!"; } }
Erstellen Sie in einer separaten CodeBehind-Datei die Seite bzw. das Steuerelement, in die das Benutzersteuerelement eingebettet und durch die dann seine Werte verändert werden sollen. Für dieses Beispiel wird der Code in einer Datei namens
MyPage
mit den entsprechenden Spracherweiterungen gespeichert.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"; } } }
Kompilieren Sie die CodeBehind-Datei des Benutzersteuerelements und die CodeBehind-Datei der einbettenden Seite bzw. des einbettenden Steuerelements in Assemblies. Vergewissern Sie sich, dass die einbettende Seite bzw. das einbettende Steuerelement Zugriff auf den Code des Benutzersteuerelements haben. Sie können alle Dateien in die gleiche DLL-Datei kompilieren. Sie können bei der Kompilierung der enthaltenden Seite bzw. des enthaltenden Benutzersteuerelements aber auch die folgenden Compileranweisungen über die Befehlszeile eingeben. Im folgenden Beispiel stellt
uc.dll
die DLL-Datei dar, die bei der Kompilierung der Quelldatei des Benutzersteuerelements erstellt wurde.Hinweis Bei den folgenden Anweisungen für die Befehlszeilen des Compilers wird vorausgesetzt, dass die Kompilierung aus dem Verzeichnis heraus vorgenommen wird, in dem sich die Quelldateien befinden. Es wird außerdem angenommen, dass in das Verzeichnis \bin kompiliert wird. Dabei ist das Verzeichnis \bin ein Unterverzeichnis des Verzeichnisses, in dem sich die Quelldateien befinden.
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
Stellen Sie außerdem sicher, dass sich alle erstellten DLL-Dateien im Verzeichnis \bin der Anwendung befinden. Dadurch können die Klassen automatisch mit den ihnen zugeordneten ASPX-Dateien oder ASCX-Dateien verknüpft werden.
Erstellen Sie die erforderlichen ASPX- und ASCX-Dateien. Fügen Sie ein PlaceHolder-Serversteuerelement in die ASPX-Datei ein. In dieses Steuerelement wird die dynamisch generierte Benutzeroberfläche der Steuerelemente eingefügt, die in der CodeBehind-DLL der Seite deklariert wurden. Fügen Sie außerdem die notwendigen HTML-Elemente der Seite ein und den von Ihnen geschriebenen Code für das Benutzersteuerelement.
Hinweis Verwenden Sie in diesem Fall weder in der @ Control-Direktive noch in der @ Page-Direktive das Src-Attribut. Da beide Klassen von einer Assembly erben, können Sie einfach das Inherits-Attribut verwenden. Wenn Sie die Seite und das Benutzersteuerelement in Namespaces entwickeln, müssen Sie außerdem den Namen des Namespaces in den Wert des Inherits-Attributs einfügen.
Im folgenden Beispiel werden die ASCX-Datei des Benutzersteuerelements und die ASPX-Datei der Seite aus dem vorherigen Beispiel verwendet.
Die ASCX-Datei:
<%@ Control Inherits="UserControlTest.MyUserControl" %> <span id="Message" style="color:<%=Color%>"><%=Text%></span>
Die ASPX-Datei:
<%@ 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>
Siehe auch
Benutzersteuerelemente für Web Forms | Verwenden eines Benutzersteuerelements in einer Web Forms-Seite | Serverereignisbehandlung in Web Forms-Seiten | Behandeln von Ereignissen eines Benutzersteuerelements