So, hier ist er nun: Der erste reguläre Post!
Eigentlich wollte Ich ja mit ein wenig anspruchsvolleren Tutorials zum Thema LINQ, .NET 3.5 & Design Patterns anfangen. Allerdings sind es ja auch immer wieder die kleinen Dinge, die man schon gefühlte 100 mal bei google gesucht hat und sich einfach nie merken kann.
Ein Kandidat hierfür ist bei mir das “Wie kann Ich noch gleich auf eine Property einer MasterPage innerhalb der ContentPage zugreifen?”.
Für alle, die es nur zufälligerweise kurz vergessen haben:
<!--MasterType VirtualPath="~/MasterPage.master"-->
Für alle, die es in Zukunft vergessen können wollen:
Angenommen, wir haben eine MasterPage, auf der ein Label platziert ist, welches den Titel der Seite darstellen soll.
DefaultMaster.master
<form id="form1" runat="server">
<div>
<asp:Label ID="Header" runat="server"></asp:Label>
<asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</div>
</form>
Wir wollen nun diesen Titel über eine Property der MasterPage direkt im Code-Behind der ContentPage ansprechen. Hier wird nun noch eine Property angelegt mit der wir das Label füllen wollen:
DefaultMaster.master.cs
public partial class MasterPage : System.Web.UI.MasterPage
{
public string HeaderText { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
if (HeaderText != null) Header.Text = HeaderText;
}
}
Hinweis: Hier wird die kurze Schreibweise von Properties ohne “backing-field” benutzt. D.h. es wird nicht explizit ein Field deklariert und der getter und setter implementiert. Diese Schreibweise gibt’s seit .NET 3.5! Natürlich kann die Property auch wie gehabt geschrieben werden!
private string headerText;
public string HeaderText
{
get { return headerText; }
set { headerText = value; }
}
Will man nun auf diese Property von einer ContentPage zugreifen, muss zuerst eine “Strongly Typed Reference” in der ContentPage zu der MasterPage erstellt werden.
Default.aspx
<!--Page Language="C#" MasterPageFile="~/MasterPage.master" ... -->
<!--MasterType VirtualPath="~/MasterPage.master"-->
Nun kann man im Code-Behind der ContentPage schön auf alle Properties der MasterPage über “Master” zugreifen:
Default.aspx.cs
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Master.HeaderText = "Hallo, Ich komme gerade von der ContentPage!";
}
}
So, das war’s auch schon. Ich denke mal, dass die nächsten Posts sich mehr mit interessanteren Dingen beschäftigen werden. Ich werde trotzdem auch weiterhin solche Kleinigkeiten posten…kann ja nix schaden die typischen Sachen mal an einer Stelle finden zu können!
Empfohlene Bücher:
C# von Kopf bis Fuß
Entwurfsmuster von Kopf bis Fuß
Objektorientierte Analyse und Design von Kopf bis Fuß
Ajax von Kopf bis Fuß