Ana Sayfayı Programlı Olarak Belirtme (VB)Specifying the Master Page Programmatically (VB)

Scott Mitchell tarafındanby Scott Mitchell

Kodu indirin veya PDF 'yi indirinDownload Code or Download PDF

İçerik sayfasının ana sayfasını, PreInit olay işleyicisi aracılığıyla programlı bir şekilde ayarlamaya bakar.Looks at setting the content page's master page programmatically via the PreInit event handler.

GirişIntroduction

Ana sayfaları kullanarak site genelinde bir düzen oluşturmabölümündeki ınaugural örneğinde, tüm içerik sayfaları, @Page yönergesindeki MasterPageFile özniteliği aracılığıyla ana sayfa bildirimli olarak başvurmuş.Since the inaugural example in Creating a Site-Wide Layout Using Master Pages, all content pages have referenced their master page declaratively via the MasterPageFile attribute in the @Page directive. Örneğin, aşağıdaki @Page yönergesi içerik sayfasını ana sayfaya bağlar Site.master:For example, the following @Page directive links the content page to the master page Site.master:

<%@ Page Language="C#" MasterPageFile="~/Site.master"... %>

System.Web.UI ad alanındaki Page sınıfı , içerik sayfasının ana sayfasının yolunu döndüren bir MasterPageFile özelliği içerir; Bu, @Page yönergesi tarafından ayarlanan bu özelliktir.The Page class in the System.Web.UI namespace includes a MasterPageFile property that returns the path to the content page's master page; it is this property that is set by the @Page directive. Bu özellik, içerik sayfasının ana sayfasını programlı bir şekilde belirtmek için de kullanılabilir.This property can also be used to programmatically specify the content page's master page. Bu yaklaşım, sayfayı ziyaret eden Kullanıcı gibi dış faktörlere bağlı olarak ana sayfayı dinamik olarak atamak istiyorsanız yararlıdır.This approach is useful if you want to dynamically assign the master page based on external factors, such as the user visiting the page.

Bu öğreticide, Web sitemize ikinci bir ana sayfa ekler ve çalışma zamanında hangi ana sayfanın kullanılacağını dinamik olarak belirleyin.In this tutorial we add a second master page to our website and dynamically decide which master page to use at runtime.

1. Adım: sayfa yaşam döngüsüne göz atınStep 1: A Look at the Page Lifecycle

Bir içerik sayfası olan bir ASP.NET sayfasının Web sunucusuna her ulaştığında, ASP.NET motoru sayfanın Içerik denetimlerini ana sayfanın karşılık gelen ContentPlaceHolder denetimlerine sigortası gerekir.Whenever a request arrives at the web server for an ASP.NET page that is a content page, the ASP.NET engine must fuse the page's Content controls into the master page's corresponding ContentPlaceHolder controls. Bu Fusion daha sonra tipik sayfa yaşam döngüsü boyunca geçebildiğiniz tek bir denetim hiyerarşisi oluşturur.This fusion creates a single control hierarchy that can then proceed through the typical page lifecycle.

Şekil 1 ' de bu Fusion gösterilmektedir.Figure 1 illustrates this fusion. Şekil 1 ' de 1. adım ilk içerik ve ana sayfa denetimi hiyerarşilerini gösterir.Step 1 in Figure 1 shows the initial content and master page control hierarchies. PreInit aşamasının kuyruk sonunda sayfadaki Içerik denetimleri, ana sayfadaki karşılık gelen Contentyertutucuları (2. adım) eklenir.At the tail end of the PreInit stage the Content controls in the page are added to the corresponding ContentPlaceHolders in the master page (Step 2). Bu Fusion 'tan sonra ana sayfa, fkullanılan denetim hiyerarşisinin kökü olarak görev yapar.After this fusion, the master page serves as the root of the fused control hierarchy. Bu fkullanılan denetim hiyerarşisi, son denetim hiyerarşisini oluşturmak için sayfaya eklenir (adım 3).This fused control hierarchy is then added to the page to produce the finalized control hierarchy (Step 3). Net sonucu, sayfanın denetim hiyerarşisinin Fuse denetim hiyerarşisini içermesi olur.The net result is that the page's control hierarchy includes the fused control hierarchy.

Ana sayfa ve Içerik sayfasının denetim hiyerarşileri, PreInit aşamasında birlikte kullanılır The Master Page and Content Page's Control Hierarchies are Fused Together during the PreInit Stage

Şekil 01: Ana sayfa ve Içerik sayfasının denetim hiyerarşileri, Preinit aşaması sırasında birlikte kullanılır (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 01: The Master Page and Content Page's Control Hierarchies are Fused Together during the PreInit Stage (Click to view full-size image)

2. Adım:MasterPageFileözelliğini koddan ayarlamaStep 2: Setting theMasterPageFileProperty from Code

Bu Fusion 'ta hangi ana sayfa paralalını Page nesnenin MasterPageFile özelliğinin değerine bağlıdır.What master page partakes in this fusion depends on the value of the Page object's MasterPageFile property. @Page yönergesindeki MasterPageFile özniteliğinin ayarlanması, Page``MasterPageFile özelliğinin, sayfanın yaşam döngüsünün ilk aşaması olan başlangıç aşamasında atanması için net etkiye sahiptir.Setting the MasterPageFile attribute in the @Page directive has the net effect of assigning the Page's MasterPageFile property during the Initialization stage, which is the very first stage of the page's lifecycle. Alternatif olarak, bu özelliği programlı bir şekilde ayarlayabiliriz.We can alternatively set this property programmatically. Ancak bu özelliğin, Şekil 1 ' deki Fusion 'un gerçekleşmeden önce ayarlanması zorunludur.However, it is imperative that this property be set before the fusion in Figure 1 takes place.

PreInit aşamasının başlangıcında, Page nesnesi PreInit olayını oluşturur ve OnPreInit yönteminiçağırır.At the start of the PreInit stage the Page object raises its PreInit event and calls its OnPreInit method. Ana sayfayı programlı olarak ayarlamak için, PreInit olayı için bir olay işleyicisi oluşturabilir veya OnPreInit yöntemini geçersiz kılabilirsiniz.To set the master page programmatically, then, we can either create an event handler for the PreInit event or override the OnPreInit method. Her iki yaklaşımdan de bakalım.Let's look at both approaches.

Sitenizin giriş sayfası için arka plan kod sınıfı dosyasını Default.aspx.vbaçarak başlayın.Start by opening Default.aspx.vb, the code-behind class file for our site's homepage. Aşağıdaki kodu yazarak sayfanın PreInit olayına bir olay işleyicisi ekleyin:Add an event handler for the page's PreInit event by typing in the following code:

Protected Sub Page_PreInit(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreInit 
End Sub

Buradan MasterPageFile özelliğini ayarlayabiliriz.From here we can set the MasterPageFile property. Kodu, MasterPageFile özelliğine "~/site.exe" değerini atayan şekilde güncelleştirin.Update the code so that it assigns the value "~/Site.master" to the MasterPageFile property.

Protected Sub Page_PreInit(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreInit 
 Me.MasterPageFile = "~/Site.master"
End Sub

Bir kesme noktası ayarlar ve hata ayıklaması ile başlatırsanız, Default.aspx sayfa ziyaret edildiğinde veya bu sayfaya her geri gönderme yapıldığında, Page_PreInit olay işleyicisi çalıştırılır ve MasterPageFile özelliği "~/site.exe" olarak atanır.If you set a breakpoint and start with debugging you'll see that whenever the Default.aspx page is visited or whenever there's a postback to this page, the Page_PreInit event handler executes and the MasterPageFile property is assigned to "~/Site.master".

Alternatif olarak, Page sınıfının OnPreInit yöntemini geçersiz kılabilir ve MasterPageFile özelliğini bu şekilde ayarlayabilirsiniz.Alternatively, you can override the Page class's OnPreInit method and set the MasterPageFile property there. Bu örnek için, ana sayfayı BasePagedeğil, belirli bir sayfada ayarlayalım.For this example, let's not set the master page in a particular page, but rather from BasePage. Ana sayfa öğreticisindeki başlık, meta etiketler ve DIĞER HTML üst bilgilerini belirterek özel bir temel sayfa sınıfı (BasePage) oluşturduğumuz geri çekin.Recall that we created a custom base page class (BasePage) back in the Specifying the Title, Meta Tags, and Other HTML Headers in the Master Page tutorial. Şu anda BasePage Page sınıfının OnLoadComplete yöntemini geçersiz kılar, burada sayfanın Title özelliği site haritası verilerine göre ayarlanır.Currently BasePage overrides the Page class's OnLoadComplete method, where it sets the page's Title property based on the site map data. Ayrıca, ana sayfayı programlı olarak belirtmek için OnPreInit metodunu da geçersiz kılmak için BasePage güncelleştirelim.Let's update BasePage to also override the OnPreInit method to programmatically specify the master page.

Protected Overrides Sub OnPreInit(ByVal e As System.EventArgs)
 Me.MasterPageFile = "~/Site.master" 
 MyBase.OnPreInit(e)
End Sub

Tüm içerik sayfalarımız BasePagetüretilmediği için, bunların hepsi ana sayfası programlı olarak atanmıştır.Because all our content pages derive from BasePage, all of them now have their master page programmatically assigned. Bu noktada, Default.aspx.vb PreInit olay işleyicisi gereksiz; Bunu kaldırmayı ücretsiz hale gelmekten çekinmeyin.At this point the PreInit event handler in Default.aspx.vb is superfluous; feel free to remove it.

@Pageyönergesi hakkında ne olacak?What About the@PageDirective?

Ne kadar karmaşık olabilecek, içerik sayfalarının ' MasterPageFile özelliklerinin artık iki yerde belirtilme yöntemidir: program aracılığıyla BasePage sınıfının OnPreInit yönteminde ve her bir içerik sayfasının @Page yönergesinde MasterPageFile özniteliği.What may be a little confusing is that the content pages' MasterPageFile properties are now being specified in two places: programmatically in the BasePage class's OnPreInit method as well as through the MasterPageFile attribute in each content page's @Page directive.

Sayfa yaşam döngüsünün ilk aşaması başlatma aşamasıdır.The first stage in the page lifecycle is the Initialization stage. Bu aşamada Page nesnesinin MasterPageFile özelliği, @Page yönergesinde MasterPageFile özniteliğinin değeri olarak atanır (sağlanmışsa).During this stage the Page object's MasterPageFile property is assigned the value of the MasterPageFile attribute in the @Page directive (if it is provided). PreInit aşaması, başlatma aşamasını izler ve Page nesnenin MasterPageFile özelliğini programlı bir şekilde ayarlamış olduğumuz ve böylece @Page yönergesinin atandığı değerin üzerine yazılmasına neden olur.The PreInit stage follows the Initialization stage, and it is here where we programmatically set the Page object's MasterPageFile property, thereby overwriting the value assigned from the @Page directive. Page nesnesinin MasterPageFile özelliğini program aracılığıyla ayarlamamız nedeniyle, son kullanıcının deneyimini etkilemeden @Page yönergesinin MasterPageFile özniteliğini kaldırabiliriz.Because we are setting the Page object's MasterPageFile property programmatically, we could remove the MasterPageFile attribute from the @Page directive without affecting the end user's experience. Bunu ikna etmek için, devam edin ve Default.aspx ' deki @Page yönergesinden MasterPageFile özniteliğini kaldırın ve ardından sayfayı bir tarayıcıdan ziyaret edin.To convince yourself of this, go ahead and remove the MasterPageFile attribute from the @Page directive in Default.aspx and then visit the page through a browser. Beklendiğinde, çıkış öznitelik kaldırılmadan önceki ile aynı olur.As you would expect, the output is the same as before the attribute was removed.

MasterPageFile özelliğinin @Page yönergesi aracılığıyla ayarlanmış olup olmadığı veya program aracılığıyla son kullanıcının deneyimine ne kadar önemsizdir.Whether the MasterPageFile property is set via the @Page directive or programmatically is inconsequential to the end user's experience. Ancak, @Page yönergesindeki MasterPageFile özniteliği, tasarımcıda WYSıWYG görünümü oluşturmak için tasarım zamanı sırasında Visual Studio tarafından kullanılır.However, the MasterPageFile attribute in the @Page directive is used by Visual Studio during design-time to produce the WYSIWYG view in the Designer. Visual Studio 'da Default.aspx geri dönüp tasarımcıya gittiğinizde, "Ana sayfa hatası: sayfada bir ana sayfa başvurusu gerektiren denetimler var, ancak hiçbiri belirtilmemiş" iletisini görürsünüz (bkz. Şekil 2).If you return to Default.aspx in Visual Studio and navigate to the Designer you'll see the message, "Master Page error: The page has controls that require a Master Page reference, but none is specified" (see Figure 2).

Kısacası, Visual Studio 'da zengin tasarım zamanı deneyiminin tadını çıkarmak için @Page yönergesindeki MasterPageFile özniteliğini bırakmanız gerekir.In short, you need to leave the MasterPageFile attribute in the @Page directive to enjoy a rich design-time experience in Visual Studio.

Visual Studio, Tasarım görünümünü Işlemek için @Page yönergesinin MasterPageFile özniteliğini kullanırVisual Studio Uses the @Page Directive's MasterPageFile Attribute to Render the Design View

Şekil 02: Visual Studio, Tasarım görünümünü işlemek Için @Page yönergesinin MasterPageFile özniteliğini kullanır (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 02: Visual Studio Uses the @Page Directive's MasterPageFile Attribute to Render the Design View (Click to view full-size image)

3. Adım: alternatif ana sayfa oluşturmaStep 3: Creating an Alternative Master Page

Bir içerik sayfasının ana sayfası çalışma zamanında programlama yoluyla ayarlanabileceğinden, belirli bir ana sayfayı bazı dış ölçütlere göre dinamik olarak yüklemek mümkündür.Because a content page's master page can be set programmatically at runtime it's possible to dynamically load a particular master page based on some external criteria. Bu işlevsellik, site düzeninin kullanıcıya göre değişmesi gereken durumlarda yararlı olabilir.This functionality can be useful in situations where the site's layout needs to vary based on the user. Örneğin, bir blog motoru Web uygulaması, kullanıcıların bloguna ait bir düzen seçmesine izin verebilir, her düzen farklı bir ana sayfayla ilişkilendirilir.For instance, a blog engine web application may allow its users to choose a layout for their blog, where each layout is associated with a different master page. Çalışma zamanında, bir ziyaretçi kullanıcının blogunu görüntülerken, Web uygulamasının blogunuzun yerleşimini belirlemesi ve ilgili ana sayfayı içerik sayfasıyla dinamik olarak ilişkilendirmeniz gerekir.At runtime, when a visitor is viewing a user's blog, the web application would need to determine the blog's layout and dynamically associate the corresponding master page with the content page.

Bir ana sayfayı bazı dış ölçütlere göre çalışma zamanında dinamik olarak yüklemeyi inceleyelim.Let's examine how to dynamically load a master page at runtime based on some external criteria. Web sitemiz şu anda yalnızca bir ana sayfa içeriyor (Site.master).Our website currently contains just one master page (Site.master). Çalışma zamanında ana sayfa seçmeyi göstermek için başka bir ana sayfa gerekiyor.We need another master page to illustrate choosing a master page at runtime. Bu adım, yeni ana sayfanın oluşturulmasına ve yapılandırılmasına odaklanmaktadır.This step focuses on creating and configuring the new master page. 4. adım, çalışma zamanında hangi ana sayfanın kullanılacağını belirlemede size bakar.Step 4 looks at determining what master page to use at runtime.

Alternate.masteradlı kök klasörde yeni bir ana sayfa oluşturun.Create a new master page in the root folder named Alternate.master. Ayrıca, AlternateStyles.cssadlı Web sitesine yeni bir stil sayfası da ekleyin.Also add a new style sheet to the website named AlternateStyles.css.

Web sitesine başka bir ana sayfa ve CSS dosyası ekleyinAdd Another Master Page and CSS File to the Website

Şekil 03: başka bir ana sayfa ve CSS dosyasını Web sitesine ekleme (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 03: Add Another Master Page and CSS File to the Website (Click to view full-size image)

Alternate.master ana sayfasını, sayfanın üst kısmında, ortalanmış ve bir Navy arka planında görüntülenecek şekilde tasarlıyorum.I've designed the Alternate.master master page to have the title displayed at the top of the page, centered and on a navy background. Sol sütundan ayrıldım ve bu içeriği artık sayfanın genişliğinin tamamına yayılan MainContent ContentPlaceHolder denetiminin altına taşıdım.I've dispensed of the left column and moved that content beneath the MainContent ContentPlaceHolder control, which now spans the entire width of the page. Ayrıca, sıralanmamış dersler listesini de MainContentyukarıdaki yatay bir listeyle değiştirdim.Furthermore, I nixed the unordered Lessons list and replaced it with a horizontal list above MainContent. Ayrıca Ana sayfa tarafından kullanılan yazı tiplerini ve renkleri (ve uzantıya göre, içerik sayfalarını) güncelleştirdim.I also updated the fonts and colors used by the master page (and, by extension, its content pages). Şekil 4 ' te, Alternate.master ana sayfası kullanılırken Default.aspx gösterilmektedir.Figure 4 shows Default.aspx when using the Alternate.master master page.

Note

ASP.NET, temalarıtanımlama olanağını içerir.ASP.NET includes the ability to define Themes. Tema, çalışma zamanında bir sayfaya uygulanabilen bir görüntü, CSS dosyası ve stille ilgili Web denetimi özelliği ayarları koleksiyonudur.A Theme is a collection of images, CSS files, and style-related Web control property settings that can be applied to a page at runtime. Bu Temalar, sitenizin düzenlerinizin yalnızca görüntülenen görüntülerde ve CSS kuralları tarafından farklı olması durumunda gideceizin yoludur.Themes are the way to go if your site's layouts differ only in the images displayed and by their CSS rules. Mizanpajlar, farklı Web denetimleri kullanma veya daha fazla farklı bir düzene sahip gibi önemli ölçüde farklıysa, ayrı ana sayfalar kullanmanız gerekir.If the layouts differ more substantially, such as using different Web controls or having a radically different layout, then you will need to use separate master pages. Temalar hakkında daha fazla bilgi için Bu öğreticinin sonundaki daha fazla okuma bölümüne başvurun.Consult the Further Reading section at the end of this tutorial for more information on Themes.

Içerik sayfalarımız artık yeni bir görünüm kullanabilirOur Content Pages Can Now Use a New Look and Feel

Şekil 04: içerik sayfalarımız artık yeni bir görünüm kullanabilir (tam boyutlu görüntüyü görüntülemek için tıklatın)Figure 04: Our Content Pages Can Now Use a New Look and Feel (Click to view full-size image)

Ana ve içerik sayfalarının biçimlendirmesi FI kullanılırken MasterPage sınıfı, içerik sayfasındaki her Içerik denetiminin ana sayfada bir ContentPlaceHolder öğesine başvurduğundan emin olmak için kontrol eder.When the master and content pages' markup are fused, the MasterPage class checks to ensure that every Content control in the content page references a ContentPlaceHolder in the master page. Var olmayan bir ContentPlaceHolder öğesine başvuran bir Içerik denetimi bulunursa bir özel durum oluşur.An exception is thrown if a Content control that references a non-existent ContentPlaceHolder is found. Diğer bir deyişle, içerik sayfasına atanan ana sayfanın içerik sayfasında her Içerik denetimi için bir ContentPlaceHolder 'a sahip olması zorunludur.In other words, it is imperative that the master page being assigned to the content page have a ContentPlaceHolder for each Content control in the content page.

Site.master ana sayfası dört ContentPlaceHolder denetimi içerir:The Site.master master page includes four ContentPlaceHolder controls:

  • head
  • MainContent
  • QuickLoginUI
  • LeftColumnContent

Web sitemizdeki bazı içerik sayfaları yalnızca bir veya iki Içerik denetimi içeriyor; diğer bir deyişle, kullanılabilir her bir Contenttutucuların Içerik denetimini içerir.Some of the content pages in our website include just one or two Content controls; others include a Content control for each of the available ContentPlaceHolders. Yeni ana sayfamız (Alternate.master) Site.master içindeki tüm Contentyertutucuları için Içerik denetimlerine sahip olan bu içerik sayfalarına atanabileceği için, Alternate.master aynı ContentPlaceHolder denetimlerinin de Site.masterda dahil olması önemlidir.If our new master page (Alternate.master) may ever be assigned to those content pages that have Content controls for all of the ContentPlaceHolders in Site.master then it is essential that Alternate.master also include the same ContentPlaceHolder controls as Site.master.

Alternate.master ana sayfanızı mayın (bkz. Şekil 4), AlternateStyles.css stil sayfasında ana sayfanın stillerini tanımlayarak başlatın.To get your Alternate.master master page to look similar to mine (see Figure 4), start by defining the master page's styles in the AlternateStyles.css style sheet. Aşağıdaki kuralları AlternateStyles.cssekleyin:Add the following rules into AlternateStyles.css:

body 
{
 font-family: Comic Sans MS, Arial; 
 font-size: medium; 
 margin: 0px; 
} 
#topContent 
{ 
 text-align: center; 
 background-color: Navy; 
 color: White; 
 font-size: x-large;
 text-decoration: none; 
 font-weight: bold; 
 padding: 10px; 
 height: 50px;
} 
#topContent a 
{ 
 text-decoration: none; 
 color: White; 
} 
#navContent 
{ 
 font-size: small; 
 text-align: center; 
} 
#footerContent 
{ 
 padding: 10px; 
 font-size: 90%; 
 text-align: center; 
 border-top: solid 1px black; 
} 
#mainContent 
{ 
 text-align: left; 
 padding: 10px;
}

Sonra, Alternate.masteriçin aşağıdaki bildirime dayalı biçimlendirmeyi ekleyin.Next, add the following declarative markup to Alternate.master. Gördüğünüz gibi Alternate.master, Site.masteriçindeki ContentPlaceHolder denetimleriyle aynı ID değerleri içeren dört ContentPlaceHolder denetimi içerir.As you can see, Alternate.master contains four ContentPlaceHolder controls with the same ID values as the ContentPlaceHolder controls in Site.master. Üstelik, ASP.NET AJAX çerçevesini kullanan Web sitemizdeki sayfalar için gerekli olan bir ScriptManager denetimini içerir.Moreover, it includes a ScriptManager control, which is necessary for those pages in our website that use the ASP.NET AJAX framework.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head id="Head1" runat="server"> 
 <title>Untitled Page</title>
 <asp:ContentPlaceHolder id="head" runat="server">
 </asp:ContentPlaceHolder> 
 <link href="AlternateStyles.css" rel="stylesheet" type="text/css"/> 
</head> 
<body> 
 <form id="form1" runat="server"> 
 <asp:ScriptManager ID="MyManager" runat="server"> 
 </asp:ScriptManager>
 <div id="topContent">
 <asp:HyperLink ID="lnkHome" runat="server" NavigateUrl="~/Default.aspx" 
 Text="Master Pages Tutorials" /> 
 </div>
 <div id="navContent"> 
 <asp:ListView ID="LessonsList" runat="server" 
 DataSourceID="LessonsDataSource">
 <LayoutTemplate>
 <asp:PlaceHolder runat="server" ID="itemPlaceholder" /> 
 </LayoutTemplate>
 <ItemTemplate>
 <asp:HyperLink runat="server" ID="lnkLesson" 
 NavigateUrl='<%# Eval("Url") %>' 
 Text='<%# Eval("Title") %>' /> 
 </ItemTemplate>
 <ItemSeparatorTemplate> | </ItemSeparatorTemplate> 
 </asp:ListView>
 <asp:SiteMapDataSource ID="LessonsDataSource" runat="server" 
 ShowStartingNode="false" /> 
 </div> 
 <div id="mainContent">
 <asp:ContentPlaceHolder id="MainContent" runat="server"> 
 </asp:ContentPlaceHolder>
 </div>
 <div id="footerContent">
 <p> 
 <asp:Label ID="DateDisplay" runat="server"></asp:Label> 
 </p>
 <asp:ContentPlaceHolder ID="QuickLoginUI" runat="server"> 
 </asp:ContentPlaceHolder>
 <asp:ContentPlaceHolder ID="LeftColumnContent" runat="server"> 
 </asp:ContentPlaceHolder>
 </div> 
 </form>
</body> 
</html>

Yeni Ana sayfa sınanıyorTesting the New Master Page

Bu yeni ana sayfayı test etmek için BasePage sınıfının OnPreInit metodunu güncelleştirin, böylece MasterPageFile özelliğine "~/Alternate.maser" değer atanır ve ardından Web sitesini ziyaret edin.To test this new master page update the BasePage class's OnPreInit method so that the MasterPageFile property is assigned the value "~/Alternate.maser" and then visit the website. Her sayfanın iki hariç hata olmadan çalışması gerekir: ~/Admin/AddProduct.aspx ve ~/Admin/Products.aspx.Every page should function without error except for two: ~/Admin/AddProduct.aspx and ~/Admin/Products.aspx. ~/Admin/AddProduct.aspx ' de DetailsView 'a bir ürün eklemek, ana sayfanın GridMessageText özelliğini ayarlamaya çalıştığı kod satırından bir NullReferenceException sonuçlanır.Adding a product to the DetailsView in ~/Admin/AddProduct.aspx results in a NullReferenceException from the line of code that attempts to set the master page's GridMessageText property. ~/Admin/Products.aspx ziyaret edildiğinde, sayfa yüklenirken "ASP. alternatif_Master ' türündeki nesne ' ASP. site_Master ' türüne atılamamak üzere bir InvalidCastException oluşturulur."When visiting ~/Admin/Products.aspx an InvalidCastException is thrown on page load with the message: "Unable to cast object of type 'ASP.alternate_master' to type 'ASP.site_master'."

Bu hatalar, Site.master arka plan kod sınıfı, Alternate.mastertanımlı olmayan ortak olayları, özellikleri ve yöntemleri içerdiğinden oluşur.These errors occur because the Site.master code-behind class includes public events, properties, and methods that are not defined in Alternate.master. Bu iki sayfanın biçimlendirme bölümünün Site.master ana sayfasına başvuran bir @MasterType yönergesi vardır.The markup portion of these two pages have a @MasterType directive that references the Site.master master page.

<%@ MasterType VirtualPath="~/Site.master" %>

Ayrıca, DetailsView 'un ~/Admin/AddProduct.aspx ItemInserted olay işleyicisi, gevşek olarak yazılmış Page.Master özelliğini Sitetüründeki bir nesneye veren kodu içerir.Also, the DetailsView's ItemInserted event handler in ~/Admin/AddProduct.aspx includes code that casts the loosely-typed Page.Master property to an object of type Site. @MasterType yönergesi (Bu şekilde kullanılır) ve ItemInserted olay işleyicisindeki atama ~/Admin/AddProduct.aspx ve ~/Admin/Products.aspx sayfalarını Site.master ana sayfasına sıkı şekilde bağar.The @MasterType directive (used this way) and the cast in the ItemInserted event handler tightly couples the ~/Admin/AddProduct.aspx and ~/Admin/Products.aspx pages to the Site.master master page.

Bu sıkı kuponu bölmek için Site.master ve Alternate.master ortak üyelerin tanımlarını içeren ortak bir temel sınıftan türeyebiliriz.To break this tight coupling we can have Site.master and Alternate.master derive from a common base class that contains definitions for the public members. Bunu izleyerek, bu ortak temel türe başvurmak için @MasterType yönergesini güncelleştirebiliriz.Following that, we can update the @MasterType directive to reference this common base type.

Özel bir temel Ana sayfa sınıfı oluşturmaCreating a Custom Base Master Page Class

BaseMasterPage.vb adlı App_Code klasöre yeni bir sınıf dosyası ekleyin ve System.Web.UI.MasterPagetüretebilirsiniz.Add a new class file to the App_Code folder named BaseMasterPage.vb and have it derive from System.Web.UI.MasterPage. BaseMasterPage' de RefreshRecentProductsGrid yöntemini ve GridMessageText özelliğini belirlememiz gerekir, ancak bu Üyeler Site.master ana sayfasına (RecentProducts GridView ve GridMessage etiketi) özgü Web denetimleriyle çalıştıkları için bu öğeleri Site.master buraya taşıyamıyoruz.We need to define the RefreshRecentProductsGrid method and the GridMessageText property in BaseMasterPage, but we can't simply move them there from Site.master because these members work with Web controls that are specific to the Site.master master page (the RecentProducts GridView and GridMessage Label).

Yapmanız gerekenler, bu üyelerin burada tanımlanması, ancak gerçekten BaseMasterPagetüretilmiş sınıflar (Site.master ve Alternate.master) tarafından uygulandığı şekilde BaseMasterPage yapılandırmaktır.What we need to do is configure BaseMasterPage in such a way that these members are defined there, but are actually implemented by BaseMasterPage's derived classes (Site.master and Alternate.master). Bu tür kalıtımı, sınıfı MustInherit ve üyeleri MustOverrideolarak işaretleyerek mümkündür.This type of inheritance is possible by marking the class as MustInherit and its members as MustOverride. Kısacası, bu anahtar sözcükleri sınıfa ve iki üyeye eklemek BaseMasterPage RefreshRecentProductsGrid ve GridMessageTextuygulamadığını, ancak türetilmiş sınıflarının olacağını duyuruyor.In short, adding these keywords to the class and its two members announces that BaseMasterPage hasn't implemented RefreshRecentProductsGrid and GridMessageText, but that its derived classes will.

Ayrıca, BaseMasterPage PricesDoubled olayını tanımlamanız ve olayı yükseltmek için türetilmiş sınıflar tarafından bir yol sağlamanız gerekir.We also need to define the PricesDoubled event in BaseMasterPage and provide a means by the derived classes to raise the event. Bu davranışı kolaylaştırmak için .NET Framework kullanılan desenler, temel sınıfta ortak bir olay oluşturmak ve OnEventNameadlı korumalı, geçersiz kılınabilir bir yöntem eklemektir.The pattern used in the .NET Framework to facilitate this behavior is to create a public event in the base class and add a protected, overridable method named OnEventName. Türetilmiş sınıflar daha sonra olayı yükseltmek için bu yöntemi çağırabilir veya olay oluşturulmadan hemen önce veya sonra kodu yürütmek için geçersiz kılabilir.Derived classes can then call this method to raise the event or can override it to execute code immediately before or after the event is raised.

BaseMasterPage sınıfınızı aşağıdaki kodu içerecek şekilde güncelleştirin:Update your BaseMasterPage class so that it contains the following code:

Public MustInherit Class BaseMasterPage 
 Inherits System.Web.UI.MasterPage 
 Public Event PricesDoubled As EventHandler
 Protected Overridable Sub OnPricesDoubled(ByVal e As EventArgs)
 RaiseEvent PricesDoubled(Me, e)
 End Sub
 Public MustOverride Sub RefreshRecentProductsGrid() 
 Public MustOverride Property GridMessageText() As String 
End Class

Sonra, Site.master arka plan kod sınıfına gidin ve BaseMasterPagetüretebilirsiniz.Next, go to the Site.master code-behind class and have it derive from BaseMasterPage. BaseMasterPage MustOverride işaretlenmiş Üyeler içerdiğinden Site.masterburada bu üyeleri geçersiz kıldık.Because BaseMasterPage contains members marked MustOverride we need to override those members here in Site.master. Yöntem ve özellik tanımlarına Overrides anahtar sözcüğünü ekleyin.Add the Overrides keyword to the method and property definitions. Ayrıca, DoublePrice düğmesinin Click olay işleyicisindeki PricesDoubled olayı temel sınıfın OnPricesDoubled yöntemine yapılan bir çağrıyla oluşturan kodu güncelleştirin.Also update the code that raises the PricesDoubled event in the DoublePrice Button's Click event handler with a call to the base class's OnPricesDoubled method.

Bu değişiklikler sonrasında Site.master arka plan kod sınıfı aşağıdaki kodu içermelidir:After these modifications the Site.master code-behind class should contain the following code:

Partial Class Site 
 Inherits BaseMasterPage
 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
 DateDisplay.Text = DateTime.Now.ToString("dddd, MMMM dd")
 End Sub
 Public Overrides Sub RefreshRecentProductsGrid() 
 RecentProducts.DataBind()
 End Sub 
 Public Overrides Property GridMessageText() As String 
 Get
 Return GridMessage.Text
 End Get 
 Set(ByVal Value As String) 
 GridMessage.Text = Value 
 End Set
 End Property 
 Protected Sub DoublePrice_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles DoublePrice.Click 
 ' Double the prices 
 DoublePricesDataSource.Update()
 ' Refresh RecentProducts 
 RecentProducts.DataBind()
 ' Raise the PricesDoubled event
 MyBase.OnPricesDoubled(EventArgs.Empty)
 End Sub 
End Class

Ayrıca, BaseMasterPage türetmek ve iki MustOverride üyesini geçersiz kılmak için Alternate.masterarka plan kod sınıfını güncelleştirmemiz gerekir.We also need to update Alternate.master's code-behind class to derive from BaseMasterPage and override the two MustOverride members. Ancak Alternate.master, en son ürünleri veya veritabanına yeni bir ürün eklendikten sonra bir ileti görüntüleyen bir etiketi içeren bir GridView içermediğinden, bu yöntemlerin hiçbir şey yapması gerekmez.But because Alternate.master does not contain a GridView that lists the most recent products nor a Label that displays a message after a new product is added to the database, these methods do not need to do anything.

Partial Class Alternate 
 Inherits BaseMasterPage
 Public Overrides Property GridMessageText() As String 
 Get
 Return String.Empty
 End Get
 Set(ByVal value As String) 
 ' Do nothing 
 End Set 
 End Property 
 Public Overrides Sub RefreshRecentProductsGrid()
 ' Do nothing 
 End Sub 
End Class

Temel Ana sayfa sınıfına başvurmaReferencing the Base Master Page Class

Artık BaseMasterPage sınıfını tamamladığımıza ve iki ana sayfamızı genişlettireceğimize göre, son adımınız bu ortak türe başvurmak için ~/Admin/AddProduct.aspx ve ~/Admin/Products.aspx sayfalarını güncelleştiririz.Now that we have completed the BaseMasterPage class and have our two master pages extending it, our final step is to update the ~/Admin/AddProduct.aspx and ~/Admin/Products.aspx pages to refer to this common type. Her iki sayfada de @MasterType yönergesini değiştirerek başlayın:Start by changing the @MasterType directive in both pages from:

<%@ MasterType VirtualPath="~/Site.master" %>

Hedef:To:

<%@ MasterType TypeName="BaseMasterPage" %>

Bir dosya yoluna başvurmak yerine @MasterType özelliği artık temel türe (BaseMasterPage) başvurur.Rather than referencing a file path, the @MasterType property now references the base type (BaseMasterPage). Sonuç olarak, her iki sayfada da arka plan kod sınıflarında kullanılan kesin türü belirtilmiş Master özelliği artık BaseMasterPage türündedir (Sitetürü yerine).Consequently, the strongly-typed Master property used in both pages' code-behind classes is now of type BaseMasterPage (instead of type Site). Bu değişiklik yerinde yeniden ziyaret ~/Admin/Products.aspx.With this change in place revisit ~/Admin/Products.aspx. Daha önce, sayfa Alternate.master ana sayfasını kullanacak şekilde yapılandırıldığı, ancak @MasterType yönergesi Site.master dosyasına başvurduğu için bu bir atama hatası ile sonuçlandı.Previously, this resulted in a casting error because the page is configured to use the Alternate.master master page, but the @MasterType directive referenced the Site.master file. Ancak artık sayfa hatasız olarak işlenir.But now the page renders without error. Bunun nedeni, Alternate.master ana sayfanın BaseMasterPage türünde bir nesneye (genişlettiğinden) yayınlanabileceğinden.This is because the Alternate.master master page can be cast to an object of type BaseMasterPage (since it extends it).

~/Admin/AddProduct.aspx' de yapılması gereken bir küçük değişiklik vardır.There's one small change that needs to be made in ~/Admin/AddProduct.aspx. DetailsView denetiminin ItemInserted olay işleyicisi hem kesin türü belirtilmiş Master özelliğini hem de gevşek olarak yazılmış Page.Master özelliğini kullanır.The DetailsView control's ItemInserted event handler uses both the strongly-typed Master property and the loosely-typed Page.Master property. @MasterType yönergesini güncelleştirdiğimiz halde kesin tür belirtilmiş başvuruyu düzelttik, ancak yine de gevşek yazılmış başvuruyu güncelleştirmemiz gerekiyor.We fixed the strongly-typed reference when we updated the @MasterType directive, but we still need to update the loosely-typed reference. Aşağıdaki kod satırını değiştirin:Replace the following line of code:

Dim myMasterPage As Site = CType(Page.Master, Site)

Aşağıdaki ile Page.Master temel türe yayınlar:With the following, which casts Page.Master to the base type:

Dim myMasterPage As BaseMasterPage = CType(Page.Master, BaseMasterPage)

4. Adım: Içerik sayfalarına hangi ana sayfanın bağlanacağını belirlemeStep 4: Determining What Master Page to Bind to the Content Pages

BasePage sınıfınız Şu anda tüm içerik sayfaları ' MasterPageFile özelliklerini sayfa yaşam döngüsünün PreInit aşamasında sabit kodlanmış bir değere ayarlıyor.Our BasePage class currently sets all content pages' MasterPageFile properties to a hard-coded value in the PreInit stage of the page lifecycle. Bu kodu, ana sayfayı bir dış faktörde temel alarak güncelleştirebiliriz.We can update this code to base the master page on some external factor. Belki de yüklenecek ana sayfa, oturum açmış olan kullanıcının tercihlerine bağlıdır.Perhaps the master page to load depends on the preferences of the currently logged on user. Bu durumda, şu anda ziyaret edilen kullanıcının ana sayfa tercihlerini gösteren BasePage OnPreInit yönteminde kod yazmamız gerekir.In that case, we'd need to write code in the OnPreInit method in BasePage that looks up the currently visiting user's master page preferences.

Kullanıcının hangi ana sayfanın kullanılacağını seçebilmesine izin veren bir Web sayfası oluşturalım Site.master veya Alternate.master ve bu seçimi bir oturum değişkenine kaydeder.Let's create a web page that allows the user to choose which master page to use - Site.master or Alternate.master - and save this choice in a Session variable. ChooseMasterPage.aspxadlı kök dizinde yeni bir Web sayfası oluşturarak başlayın.Start by creating a new web page in the root directory named ChooseMasterPage.aspx. Bu sayfayı (veya başka bir içerik sayfası) oluştururken, ana sayfa BasePageprogramlı olarak ayarlandığı için onu ana sayfaya bağlamanız gerekmez.When creating this page (or any other content pages henceforth) you don't need to bind it to a master page because the master page is set programmatically in BasePage. Bununla birlikte, yeni sayfayı bir ana sayfaya bağlamayın, yeni sayfanın varsayılan bildirime dayalı biçimlendirmesi, ana sayfa tarafından sağlanan bir Web formu ve diğer içerikleri içerir.However, if you do not bind the new page to a master page then the new page's default declarative markup contains a Web Form and other content supplied by the master page. Bu biçimlendirmeyi uygun Içerik denetimleriyle el ile değiştirmeniz gerekir.You'll need to manually replace this markup with the appropriate Content controls. Bu nedenle, yeni ASP.NET sayfasını bir ana sayfaya bağlamayı daha kolay buldum.For that reason, I find it easier to bind the new ASP.NET page to a master page.

Note

Site.master ve Alternate.master aynı ContentPlaceHolder denetimleri kümesine sahip olduğundan, yeni içerik sayfasını oluştururken hangi ana sayfanın tercih ettiğinize bağımsız değildir.Because Site.master and Alternate.master have the same set of ContentPlaceHolder controls it doesn't matter what master page you choose when creating the new content page. Tutarlılık için Site.masterkullanmayı öneriyorum.For consistency, I'd suggest using Site.master.

Web sitesine yeni bir Içerik sayfası eklemek Add a New Content Page to the Website

Şekil 05: Web sitesine yeni içerik sayfası ekleme (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 05: Add a New Content Page to the Website (Click to view full-size image)

Web.sitemap dosyasını bu ders için bir giriş içerecek şekilde güncelleştirin.Update the Web.sitemap file to include an entry for this lesson. Ana sayfalar ve ASP.NET AJAX dersi için <siteMapNode> altına aşağıdaki biçimlendirmeyi ekleyin:Add the following markup beneath the <siteMapNode> for the Master Pages and ASP.NET AJAX lesson:

<siteMapNode url="~/ChooseMasterPage.aspx" title="Choose a Master Page" />

ChooseMasterPage.aspx sayfasına herhangi bir içerik eklemeden önce, sayfanın arka plan kod sınıfını (System.Web.UI.Pageyerine) BasePage türeten önce güncellemek için bir dakikanızı ayırın.Before adding any content to the ChooseMasterPage.aspx page take a moment to update the page's code-behind class so that it derives from BasePage (rather than System.Web.UI.Page). Sonra, sayfaya bir DropDownList denetimi ekleyin, ID özelliğini MasterPageChoiceolarak ayarlayın ve "~/site. Master" ve "~/Alternate.exe" Text değerleriyle iki ListItems ekleyin.Next, add a DropDownList control to the page, set its ID property to MasterPageChoice, and add two ListItems with the Text values of "~/Site.master" and "~/Alternate.master".

Sayfaya bir düğme web denetimi ekleyin ve ID ve Text özelliklerini sırasıyla SaveLayout ve "düzen seçimini Kaydet" olarak ayarlayın.Add a Button Web control to the page and set its ID and Text properties to SaveLayout and "Save Layout Choice", respectively. Bu noktada sayfanızın bildirime dayalı biçimlendirmesi aşağıdakine benzer görünmelidir:At this point your page's declarative markup should look similar to the following:

<p> 
 Your layout choice: 
 <asp:DropDownList ID="MasterPageChoice" runat="server"> 
 <asp:ListItem>~/Site.master</asp:ListItem>
 <asp:ListItem>~/Alternate.master</asp:ListItem>
 </asp:DropDownList> 
</p> 
<p> 
 <asp:Button ID="SaveLayout" runat="server" Text="Save Layout Choice" /> 
</p>

Sayfa ilk kez ziyaret edildiğinde, kullanıcının şu anda seçili olan ana sayfa seçimini görüntülemesi gerekir.When the page is first visited we need to display the user's currently selected master page choice. Page_Load olay işleyicisi oluşturun ve aşağıdaki kodu ekleyin:Create a Page_Load event handler and add the following code:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
 If Not Page.IsPostBack Then 
 If Session("MyMasterPage") IsNot Nothing Then 
 Dim li As ListItem = MasterPageChoice.Items.FindByText(Session("MyMasterPage").ToString())
 If li IsNot Nothing Then 
 li.Selected = True
 End If 
 End If 
 End If 
End Sub

Yukarıdaki kod yalnızca ilk sayfada (sonraki geri göndermeler için değil) ziyaret çalıştırılır.The above code executes only on the first page visit (and not on subsequent postbacks). Önce oturum değişkeninin MyMasterPage olup olmadığını kontrol eder.It first checks to see if the Session variable MyMasterPage exists. Varsa, MasterPageChoice DropDownList 'de eşleşen ListItem bulmayı dener.If it does, it attempts to find the matching ListItem in the MasterPageChoice DropDownList. Eşleşen bir ListItem bulunursa, Selected özelliği Trueolarak ayarlanır.If a matching ListItem is found, its Selected property is set to True.

Ayrıca, kullanıcının seçimini MyMasterPage oturum değişkenine kaydeden koda de ihtiyacımız var.We also need code that saves the user's choice into the MyMasterPage Session variable. SaveLayout düğmenin Click olayı için bir olay işleyicisi oluşturun ve aşağıdaki kodu ekleyin:Create an event handler for the SaveLayout Button's Click event and add the following code:

Protected Sub SaveLayout_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles SaveLayout.Click 
 Session("MyMasterPage") = MasterPageChoice.SelectedValue 
 Response.Redirect("ChooseMasterPage.aspx")
End Sub

Note

Click olay işleyicisi geri gönderme sırasında yürütüldüğünde, ana sayfa zaten seçilmiş demektir.By the time the Click event handler executes on postback, the master page has already been selected. Bu nedenle, bir sonraki sayfa ziyaret edilene kadar kullanıcının açılan liste seçimi geçerli olmayacaktır.Therefore, the user's drop-down list selection won't be in effect until the next page visit. Response.Redirect tarayıcıyı ChooseMasterPage.aspxyeniden isteyecek şekilde zorlar.The Response.Redirect forces the browser to re-request ChooseMasterPage.aspx.

ChooseMasterPage.aspx sayfası tamamlandıktan sonra son görevimiz, MyMasterPage Session değişkeninin değerine göre MasterPageFile özelliğini BasePage atayacaktır.With the ChooseMasterPage.aspx page complete, our final task is to have BasePage assign the MasterPageFile property based on the value of the MyMasterPage Session variable. Oturum değişkeni ayarlanmamışsa Site.master``BasePage varsayılan değeri yoktur.If the Session variable is not set have BasePage default to Site.master.

Protected Overrides Sub OnPreInit(ByVal e As System.EventArgs)
 SetMasterPageFile() 
 MyBase.OnPreInit(e)
End Sub 
Protected Overridable Sub SetMasterPageFile() 
 Me.MasterPageFile = GetMasterPageFileFromSession() 
End Sub 
Protected Function GetMasterPageFileFromSession() As String 
 If Session("MyMasterPage") Is Nothing Then
 Return "~/Site.master"
 Else 
 Return Session("MyMasterPage").ToString() 
 End If 
End Function

Note

Page nesnesinin MasterPageFile özelliğini OnPreInit olay işleyicisine ve iki ayrı yönteme atayan kodu taşıdım.I moved the code that assigns the Page object's MasterPageFile property out of the OnPreInit event handler and into two separate methods. Bu ilk yöntem SetMasterPageFile, GetMasterPageFileFromSessionikinci yöntem tarafından döndürülen değere MasterPageFile özelliğini atar.This first method, SetMasterPageFile, assigns the MasterPageFile property to the value returned by the second method, GetMasterPageFileFromSession. SetMasterPageFile yöntemi Overridable, BasePage genişleten gelecekteki sınıfların isteğe bağlı olarak özel mantık uygulamak üzere geçersiz kılmasını sağlayabilirsiniz.I marked the SetMasterPageFile method Overridable so that future classes that extend BasePage can optionally override it to implement custom logic, if needed. Bir sonraki öğreticide BasePage``SetMasterPageFile özelliğini geçersiz kılma örneği görüyoruz.We'll see an example of overriding BasePage's SetMasterPageFile property in the next tutorial.

Bu kodla birlikte ChooseMasterPage.aspx sayfasını ziyaret edin.With this code in place, visit the ChooseMasterPage.aspx page. Başlangıçta ana sayfa Site.master seçilidir (bkz. Şekil 6), ancak Kullanıcı açılan listeden farklı bir ana sayfa seçebilir.Initially, the Site.master master page is selected (see Figure 6), but the user can pick a different master page from the drop-down list.

Içerik sayfaları site. Master ana sayfası kullanılarak görüntülenirContent Pages are Displayed Using the Site.master Master Page

Şekil 06: içerik sayfaları Site.master ana sayfa kullanılarak görüntülenir (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 06: Content Pages are Displayed Using the Site.master Master Page (Click to view full-size image)

Içerik sayfaları artık alternatif. Master ana sayfası kullanılarak gösteriliyorContent Pages are Now Displayed Using the Alternate.master Master Page

Şekil 07: Içerik sayfaları artık Alternate.master ana sayfası kullanılarak görüntülenir (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 07: Content Pages are Now Displayed Using the Alternate.master Master Page (Click to view full-size image)

ÖzetSummary

İçerik sayfası ziyaret edildiğinde, Içerik denetimleri ana sayfanın ContentPlaceHolder denetimleriyle birlikte kullanılır.When a content page is visited, its Content controls are fused with its master page's ContentPlaceHolder controls. İçerik sayfasının ana sayfası, başlatma aşamasında @Page yönergesinin MasterPageFile özniteliğine atanan Page sınıfın MasterPageFile özelliği tarafından gösterilir.The content page's master page is denoted by the Page class's MasterPageFile property, which is assigned to the @Page directive's MasterPageFile attribute during the Initialization stage. Bu öğreticide, Önınıt aşamasının sonundan önce yaptığımız sürece MasterPageFile özelliğine bir değer atayabiliriz.As this tutorial showed, we can assign a value to the MasterPageFile property as long as we do so before the end of the PreInit stage. Ana sayfayı programlı bir şekilde belirleyebilmek, dış faktörlere bağlı olarak bir içerik sayfasını dinamik olarak ana sayfaya bağlama gibi daha gelişmiş senaryolar için kapıyı açar.Being able to programmatically specify the master page opens the door for more advanced scenarios, such as dynamically binding a content page to a master page based on external factors.

Programlamanın kutlu olsun!Happy Programming!

Daha Fazla BilgiFurther Reading

Bu öğreticide ele alınan konular hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın:For more information on the topics discussed in this tutorial, refer to the following resources:

Yazar hakkındaAbout the Author

Birden çok ASP/ASP. NET Books ve 4GuysFromRolla.com 'in yazarı Scott Mitchell, 1998 sürümünden bu yana Microsoft Web teknolojileriyle birlikte çalışıyor.Scott Mitchell, author of multiple ASP/ASP.NET books and founder of 4GuysFromRolla.com, has been working with Microsoft Web technologies since 1998. Scott bağımsız danışman, Trainer ve yazıcı olarak çalışıyor.Scott works as an independent consultant, trainer, and writer. En son kitabı, 24 saat içinde ASP.NET 3,5 kendi kendinize eğitimister.His latest book is Sams Teach Yourself ASP.NET 3.5 in 24 Hours. Scott 'a mitchell@4GuysFromRolla.com veya blogundan http://ScottOnWriting.NETüzerinden erişilebilir.Scott can be reached at mitchell@4GuysFromRolla.com or via his blog at http://ScottOnWriting.NET.

Özel olarak teşekkürlerSpecial Thanks To

Bu öğretici serisi birçok yararlı gözden geçirenler tarafından incelendi.This tutorial series was reviewed by many helpful reviewers. Bu öğretici için lider gözden geçiren Suçi Banerjee idi.Lead reviewer for this tutorial was Suchi Banerjee. Yaklaşan MSDN makalelerimi gözden geçiriyor musunuz?Interested in reviewing my upcoming MSDN articles? Öyleyse, beni mitchell@4GuysFromRolla.com bir satır bırakınIf so, drop me a line at mitchell@4GuysFromRolla.com