Ana Sayfadan İçerik Sayfası ile Etkileşim Kurma (C#)Interacting with the Master Page from the Content Page (C#)

Scott Mitchell tarafındanby Scott Mitchell

Kodu indirin veya PDF 'yi indirinDownload Code or Download PDF

Içerik sayfasındaki koddan, ana sayfanın özellikler, vs. yöntemlerini çağırma, özelliklerini ayarlama hakkında inceler.Examines how to call methods, set properties, etc. of the Master Page from code in the Content Page.

GirişIntroduction

Son beş öğreticilerde, ana sayfa oluşturma, içerik bölgelerini tanımlama, ASP.NET sayfalarını ana sayfaya bağlama ve sayfaya özgü içerik tanımlama konusunda baktık.Over the course of the past five tutorials we have looked at how to create a master page, define content regions, bind ASP.NET pages to a master page, and define page-specific content. Bir ziyaretçi belirli bir içerik sayfasını istediğinde, içerik ve ana sayfaların biçimlendirmesi çalışma zamanında kullanılır ve bu da birleştirilmiş bir denetim hiyerarşisinin oluşturulmasına neden olur.When a visitor requests a particular content page, the content and master pages' markup are fused at runtime, resulting in the rendering of a unified control hierarchy. Bu nedenle, ana sayfanın ve içerik sayfalarından birinin etkileşime girebileceği bir yol zaten gördük: içerik sayfası, ana sayfanın ContentPlaceHolder denetimlerinde kullanılacak biçimlendirmeyi yanlış bir biçimde gördünüz.Therefore, we have already seen one way in which the master page and one of its content pages can interact: the content page spells out the markup to transfuse into the master page's ContentPlaceHolder controls.

Henüz incelendiğimiz, ana sayfa ve içerik sayfasının programlama yoluyla nasıl etkileşim kurabileceğiz.What we have yet to examine is how the master page and content page can interact programmatically. Ana sayfanın ContentPlaceHolder denetimlerine yönelik biçimlendirmeyi tanımlamanın yanı sıra, bir içerik sayfası da ana sayfanın ortak özelliklerine değer atayabilir ve ortak yöntemlerini çağırabilir.In addition to defining the markup for the master page's ContentPlaceHolder controls, a content page can also assign values to its master page's public properties and invoke its public methods. Benzer şekilde, bir ana sayfa, içerik sayfalarıyla etkileşime geçebilir.Similarly, a master page may interact with its content pages. Ana ve içerik sayfası arasındaki programlama etkileşimi, bildirim temelli işaretlemelerde etkileşim dışında daha az yaygın olsa da, bu tür programlama etkileşiminin gerektiği birçok senaryo vardır.While programmatic interaction between a master and content page is less common than the interaction between their declarative markups, there are many scenarios where such programmatic interaction is needed.

Bu öğreticide, bir içerik sayfasının, ana sayfası ile programlı olarak nasıl etkileşime girebileceği anlatılmaktadır; sonraki öğreticide, ana sayfanın içerik sayfalarıyla nasıl benzer şekilde etkileşime gireceğini inceleyeceğiz.In this tutorial we examine how a content page can programmatically interact with its master page; in the next tutorial we will look at how the master page can similarly interact with its content pages.

Bir Içerik sayfası ve onun ana sayfası arasındaki programlama etkileşimi örnekleriExamples of Programmatic Interaction Between a Content Page and its Master Page

Sayfanın belirli bir bölgesinin sayfa temelinde yapılandırılması gerektiğinde, ContentPlaceHolder denetimini kullanırız.When a particular region of a page needs to be configured on a page-by-page basis, we use a ContentPlaceHolder control. Ancak sayfaların çoğunluğunun belirli bir çıktıyı yaymasına gerek duyduğu durumlar hakkında ne olur, ancak başka bir şey göstermek için az sayıda sayfanın özelleştirilmesi gerekir mi?But what about situations where the majority of pages need to emit a certain output, but a small number of pages need to customize it to show something else? Birden çok contentter ve varsayılan içerik öğreticisinde incedığımız gibi bir örnek, her sayfada bir oturum açma arabirimi görüntülenmesini içerir.One such example, which we examined in the Multiple ContentPlaceHolders and Default Content tutorial, involves displaying a login interface on each page. Çoğu sayfanın bir oturum açma arabirimi içermesi gerekir, ancak örneğin, ana oturum açma sayfası (Login.aspx) gibi bir sayfa için bastırılmalıdır. Hesap Oluştur sayfası; ve yalnızca kimliği doğrulanmış kullanıcılar tarafından erişilebilen diğer sayfalara.While most pages should include a login interface, it should be suppressed for a handful of pages, such as: the main login page (Login.aspx); the Create Account page; and other pages that are only accessible to authenticated users. Birden çok Contenttutucuları ve varsayılan içerik öğreticisi, ana sayfada bir ContentPlaceHolder için varsayılan içeriğin nasıl tanımlanacağını ve ardından varsayılan içeriğin istenmediğinde bu sayfalarda nasıl geçersiz kılınacağını gösterdi.The Multiple ContentPlaceHolders and Default Content tutorial showed how to define the default content for a ContentPlaceHolder in the master page and then how to override it in those pages where the default content was not wanted.

Başka bir seçenek de ana sayfada, oturum açma arabiriminin gösterilip gösterilmeyeceğini veya gizlenmeyeceğini belirten bir ortak özellik veya yöntem oluşturmaktır.Another option is to create a public property or method within the master page that indicates whether to show or hide the login interface. Örneğin, ana sayfa, ana sayfada oturum açma denetiminin Visible özelliğini ayarlamak için değeri kullanılan ShowLoginUI adlı ortak bir özellik içerebilir.For example, the master page might include a public property named ShowLoginUI whose value was used to set the Visible property of the Login control in the master page. Oturum açma kullanıcı arabiriminin gizlenmesi gereken içerik sayfaları, programlı olarak ShowLoginUI özelliğini falseolarak ayarlayabilir.Those content pages where the login user interface should be suppressed could then programmatically set the ShowLoginUI property to false.

En yaygın içerik ve ana sayfa etkileşimi örneği, ana sayfada görünen verilerin içerik sayfasında transpired olduktan sonra yenilenmesi gerektiğinde oluşur.Perhaps the most common example of content and master page interaction occurs when data displayed in the master page needs to be refreshed after some action has transpired in the content page. Belirli bir veritabanı tablosundan en son eklenen beş kaydı görüntüleyen ve içerik sayfalarından birinin aynı tabloya yeni kayıtlar eklemek için bir arabirim içerdiği bir GridView içeren bir ana sayfayı düşünün.Consider a master page that includes a GridView that displays the five most recently added records from a particular database table, and that one of its content pages includes an interface for adding new records to that same table.

Bir Kullanıcı yeni bir kayıt eklemek için sayfayı ziyaret ettiğinde, ana sayfada en son eklenen beş kaydı görür.When a user visits the page to add a new record, she sees the five most recently added records displayed in the master page. Yeni kaydın sütunlarının değerlerini doldurduktan sonra formu gönderir.After filling in the values for the new record's columns, she submits the form. Ana sayfadaki GridView 'un EnableViewState özelliği true (varsayılan) olarak ayarlandığı varsayılırsa, içeriği görünüm durumundan yeniden yüklenir ve sonuç olarak veritabanına daha yeni bir kayıt eklenmiş olsa da, beş aynı kayıt görüntülenir.Assuming that the GridView in the master page has its EnableViewState property set to true (the default), its content is reloaded from view state and, consequently, the five same records are displayed even though a newer record was just added to the database. Bu, kullanıcıyı şaşırtır.This may confuse the user.

Note

GridView 'un görünüm durumunu her geri göndermede arka plandaki veri kaynağına yeniden bağlanacak şekilde devre dışı bıraksanız bile, veriler, yeni kaydın daTaB 'ye eklendiğine göre daha önce sayfa yaşam döngüsü içinde GridView 'a bağlandığından yalnızca yeni eklenen kaydı göstermez. ASE.Even if you disable the GridView's view state so that it rebinds to its underlying data source on every postback, it still won't show the just-added record because the data is bound to the GridView earlier in the page lifecycle than when the new record is added to the database.

Bu sorunu gidermek için, yeni kayıt veritabanına eklendikten sonra GridView 'un geri göndermede ana sayfanın GridView 'da gösterilmesi için GridView 'a bir veri kaynağına yeniden bağlamasını söylemek gerekir.To remedy this so that the just-added record is displayed in the master page's GridView on postback we need to instruct the GridView to rebind to its data source after the new record has been added to the database. Yeni kayıt (ve olay işleyicileri) ekleme arabirimi içerik sayfasında yer aldığı ancak yenilenmesi gereken GridView ana sayfada olduğundan, bu, içerik ve ana sayfalar arasında etkileşim gerektirir.This requires interaction between the content and master pages because the interface for adding the new record (and its event handlers) are in the content page but the GridView that needs to be refreshed is in the master page.

İçerik sayfasındaki bir olay işleyicisinden ana sayfanın görüntüsünü yenilemek, içerik ve ana sayfa etkileşimi için en yaygın gereksinimlerden biri olduğundan, bu konuyu daha ayrıntılı bir şekilde keşfedelim.Because refreshing the master page's display from an event handler in the content page is one of the most common needs for content and master page interaction, let's explore this topic in more detail. Bu öğreticiye yönelik indirme, Web sitesinin App_Data klasöründe NORTHWIND.MDF adlı bir Microsoft SQL Server 2005 Express Edition veritabanı içerir.The download for this tutorial includes a Microsoft SQL Server 2005 Express Edition database named NORTHWIND.MDF in the website's App_Data folder. Northwind veritabanı, kurgusal bir şirket için ürün, çalışan ve satış bilgilerini depolar, Northwind Traders.The Northwind database stores product, employee, and sales information for a fictitious company, Northwind Traders.

1. adım, ana sayfada bir GridView 'da en son eklenen beş ürünü görüntülemeyi adım adım açıklar.Step 1 walks through displaying the five most recently added products in a GridView in the master page. 2. adım yeni ürünler eklemek için bir içerik sayfası oluşturur.Step 2 creates a content page for adding new products. 3. adım, ana sayfada ortak özellikler ve Yöntemler oluşturma ve 4. adım, içerik sayfasından bu özellikler ve yöntemlerle programlı bir şekilde arabirim oluşturmayı gösterir.Step 3 looks at how to create public properties and methods in the master page, and Step 4 illustrates how to programmatically interface with these properties and methods from the content page.

Note

Bu öğreticide, ASP.NET 'deki verilerle çalışma özelliklerinin açıklaması yoktur.This tutorial does not delve into the specifics of working with data in ASP.NET. Ana sayfayı verileri görüntüleyecek şekilde ayarlamaya yönelik adımlar ve veri ekleme için içerik sayfası tamamlanmıştır, ancak Breezy.The steps for setting up the master page to display data and the content page for inserting data are complete, yet breezy. Daha ayrıntılı bir bakış için veri görüntüleme ve ekleme ve SqlDataSource ve GridView denetimlerini kullanma hakkında daha fazla bilgi için, Bu öğreticinin sonundaki diğer okumalar bölümünde bulunan kaynaklara bakın.For a more in-depth look at displaying and inserting data and using the SqlDataSource and GridView controls, consult the resources in the Further Readings section at the end of this tutorial.

1. Adım: Ana sayfada en son eklenen beş ürünü görüntülemeStep 1: Displaying the Five Most Recently Added Products in the Master Page

Site.master ana sayfasını açın ve leftContent <div>bir etiket ve bir GridView denetimi ekleyin.Open the Site.master master page and add a Label and a GridView control to the leftContent <div>. Etiketin Text özelliğini temizleyin, EnableViewState özelliğini false olarak ayarlayın ve ID özelliğini GridMessageolarak ayarlayın; GridView 'un ID özelliğini RecentProductsolarak ayarlayın.Clear out the Label's Text property, set its EnableViewState property to false, and its ID property to GridMessage; set the GridView's ID property to RecentProducts. Sonra, tasarımcıdan GridView 'un akıllı etiketini genişletin ve yeni bir veri kaynağına bağlamayı seçin.Next, from the Designer, expand the GridView's smart tag and choose to bind it to a new data source. Bu, veri kaynağı Yapılandırma Sihirbazı 'nı başlatır.This launches the Data Source Configuration wizard. App_Data klasöründeki Northwind veritabanı Microsoft SQL Server bir veritabanı olduğundan, öğesini seçerek bir SqlDataSource oluşturmayı seçin (bkz. Şekil 1); SqlDataSource RecentProductsDataSourceadlandırın.Because the Northwind database in the App_Data folder is a Microsoft SQL Server database, choose to create a SqlDataSource by selecting (see Figure 1); name the SqlDataSource RecentProductsDataSource.

GridView 'u, RecentProductsDataSource adlı bir SqlDataSource denetimine bağlama Bind the GridView to a SqlDataSource Control Named RecentProductsDataSource

Şekil 01: GridView öğesini RecentProductsDataSource adlı bir SqlDataSource denetimine bağlama (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 01: Bind the GridView to a SqlDataSource Control Named RecentProductsDataSource (Click to view full-size image)

Sonraki adım bize hangi veritabanının bağlanılacağını belirtmemizi ister.The next step asks us to specify what database to connect to. Açılan listeden NORTHWIND.MDF veritabanı dosyasını seçin ve Ileri ' ye tıklayın.Choose the NORTHWIND.MDF database file from the drop-down list and click Next. Bu veritabanını ilk kez kullandığımızda, sihirbaz Web.config' de bağlantı dizesini depolamayı sunacak.Because this is the first time we've used this database, the wizard will offer to store the connection string in Web.config. NorthwindConnectionStringadı kullanarak bağlantı dizesini depoladığından.Have it store the connection string using the name NorthwindConnectionString.

Northwind veritabanına bağlanınConnect to the Northwind Database

Şekil 02: Northwind veritabanına bağlanın (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 02: Connect to the Northwind Database (Click to view full-size image)

Veri kaynağını yapılandırma Sihirbazı, verileri almak için kullanılan sorguyu belirleyebilmemiz için iki yol sunar:The Configure Data Source wizard provides two means by which we can specify the query used to retrieve data:

  • Özel bir SQL ifadesini veya saklı yordamı belirterek veyaBy specifying a custom SQL statement or stored procedure, or
  • Bir tablo veya görünüm seçerek ve sonra döndürülecek sütunları belirterekBy picking a table or view and then specifying the columns to return

Yalnızca beş adet en son eklenen ürünü döndürmek istiyoruz, özel bir SQL ekstresi belirtmemiz gerekir.Because we want to return just the five most recently added products, we need to specify a custom SQL statement. Aşağıdaki seçme sorgusunu kullanın:Use the following SELECT query:

SELECT TOP 5 ProductName, UnitPrice FROM Products ORDER BY ProductID DESC

TOP 5 anahtar sözcüğü sorgudaki ilk beş kaydı döndürür.The TOP 5 keyword returns only the first five records from the query. Products tablonun birincil anahtarı ProductID, tabloya eklenen her yeni ürünün önceki girdiden daha büyük bir değere sahip olduğunu sağlayan bir IDENTITY sütunudur.The Products table's primary key, ProductID, is an IDENTITY column, which assures us that each new product added to the table will have a larger value than the previous entry. Bu nedenle, sonuçları azalan sırada ProductID sıralamada, en son oluşturulanlar ile başlayan ürünler döndürülür.Therefore, sorting the results by ProductID in descending order returns the products starting with the most recently created ones.

en son eklenen beş ürünü döndürürReturn the Five Most Recently Added Products

Şekil 03: en son eklenen beş ürünü döndürün (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 03: Return the Five Most Recently Added Products (Click to view full-size image)

Sihirbazı tamamladıktan sonra, Visual Studio GridView için iki BoundFields üretir ve veritabanından döndürülen ProductName ve UnitPrice alanlarını görüntüler.After completing the wizard, Visual Studio generates two BoundFields for the GridView to display the ProductName and UnitPrice fields returned from the database. Bu noktada, ana sayfanızın bildirim temelli biçimlendirmesi aşağıdakine benzer bir biçimlendirme içermelidir:At this point your master page's declarative markup should include markup similar to the following:

<asp:Label ID="GridMessage" runat="server" EnableViewState="false"></asp:Label>
<asp:GridView ID="RecentProducts" runat="server" AutoGenerateColumns="False"
 DataSourceID="RecentProductsDataSource">
 <Columns> 
 <asp:BoundField DataField="ProductName" HeaderText="ProductName" 
 SortExpression="ProductName"/> 
 <asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice"
 SortExpression="UnitPrice"/> 
 </Columns> 
</asp:GridView> 

<asp:SqlDataSource ID="RecentProductsDataSource" runat="server" 
 ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>" 
 SelectCommand="SELECT TOP 5 ProductName, UnitPrice FROM Products ORDER BY ProductID DESC"> 
</asp:SqlDataSource>

Gördüğünüz gibi, biçimlendirme şunları içerir: Label Web Control (GridMessage); GridView RecentProducts, iki BoundFields ile; ve en son eklenen beş ürünü geri getiren bir SqlDataSource denetimi.As you can see, the markup contains: the Label Web control (GridMessage); the GridView RecentProducts, with two BoundFields; and a SqlDataSource control that returns the five most recently added products.

Bu GridView oluşturuldu ve SqlDataSource denetimi yapılandırılmışsa Web sitesini bir tarayıcı aracılığıyla ziyaret edin.With this GridView created and its SqlDataSource control configured, visit the website through a browser. Şekil 4 ' te gösterildiği gibi, sol alt köşede en son eklenen beş ürünü listeleyen bir kılavuz görürsünüz.As Figure 4 shows, you will see a grid in the lower left corner that lists the five most recently added products.

GridView en son eklenen beş ürünü görüntülerThe GridView Displays the Five Most Recently Added Products

Şekil 04: GridView en son eklenen beş ürünü görüntüler (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 04: The GridView Displays the Five Most Recently Added Products (Click to view full-size image)

Note

GridView 'un görünümünü temizlemeyi ücretsiz olarak hissetmekten çekinmeyin.Feel free to clean up the appearance of the GridView. Bazı öneriler, görüntülenecek UnitPrice değerini para birimi olarak biçimlendirmeyi ve kılavuz görünümünü geliştirmek için arka plan renkleri ve yazı tiplerini kullanmayı içerir.Some suggestions include formatting the displayed UnitPrice value as a currency and using background colors and fonts to improve the grid's appearance.

2. Adım: yeni ürünler eklemek için Içerik sayfası oluşturmaStep 2: Creating a Content Page to Add New Products

Bir sonraki göreviniz, bir kullanıcının Products tablosuna yeni bir ürün ekleyebileceği bir içerik sayfası oluşturmaktır.Our next task is to create a content page from which a user can add a new product to the Products table. AddProduct.aspxadlı Admin klasöre yeni bir içerik sayfası ekleyerek Site.master ana sayfasına bağlamayı unutmayın.Add a new content page to the Admin folder named AddProduct.aspx, making sure to bind it to the Site.master master page. Şekil 5 ' te, Bu sayfa Web sitesine eklendikten sonra Çözüm Gezgini gösterilmektedir.Figure 5 shows the Solution Explorer after this page has been added to the website.

Yönetici klasörüne yeni bir ASP.NET sayfası eklemek Add a New ASP.NET Page to the Admin Folder

Şekil 05: Admin klasöre yeni bir ASP.NET sayfası ekleme (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 05: Add a New ASP.NET Page to the Admin Folder(Click to view full-size image)

Ana sayfada başlık, meta etiketler ve DIĞER HTML üst bilgilerini belirtme öğreticisinde, açıkça ayarlanmamışsa sayfanın başlığını oluşturan BasePage adlı özel bir temel sayfa sınıfı oluşturduğumuz hatırlayın.Recall that in the Specifying the Title, Meta Tags, and Other HTML Headers in the Master Page tutorial we created a custom base page class named BasePage that generated the page's title if it was not explicitly set. AddProduct.aspx sayfanın arka plan kod sınıfına gidin ve BasePage türetebilirsiniz (System.Web.UI.Pageyerine).Go to the AddProduct.aspx page's code-behind class and have it derive from BasePage (instead of from System.Web.UI.Page).

Son olarak, Web.sitemap dosyasını bu ders için bir giriş içerecek şekilde güncelleştirin.Finally, update the Web.sitemap file to include an entry for this lesson. Denetim KIMLIĞI adlandırma sorunları dersi için <siteMapNode> altına aşağıdaki biçimlendirmeyi ekleyin:Add the following markup beneath the <siteMapNode> for the Control ID Naming Issues lesson:

<siteMapNode url="~/Admin/AddProduct.aspx" title="Content to Master Page Interaction" />

Şekil 6 ' da gösterildiği gibi, bu <siteMapNode> öğesinin eklenmesi dersler listesinde yansıtılır.As shown in Figure 6, the addition of this <siteMapNode> element is reflected in the Lessons list.

AddProduct.aspxdön.Return to AddProduct.aspx. MainContent ContentPlaceHolder Içerik denetiminde, bir DetailsView denetimi ekleyin ve NewProductadlandırın.In the Content control for the MainContent ContentPlaceHolder, add a DetailsView control and name it NewProduct. DetailsView öğesini NewProductDataSourceadlı yeni bir SqlDataSource denetimine bağlayın.Bind the DetailsView to a new SqlDataSource control named NewProductDataSource. Adım 1 ' deki SqlDataSource ile benzer şekilde, Sihirbazı Northwind veritabanını kullanacak şekilde yapılandırın ve özel bir SQL ifadesini belirtmeyi seçin.Like with the SqlDataSource in Step 1, configure the wizard so that it uses the Northwind database and choose to specify a custom SQL statement. DetailsView veritabanına öğe eklemek için kullanılacağından, hem SELECT hem de bir INSERT ifadesini belirtmemiz gerekir.Because the DetailsView will be used to add items to the database, we need to specify both a SELECT statement and an INSERT statement. Aşağıdaki SELECT sorgusunu kullanın:Use the following SELECT query:

SELECT ProductName, UnitPrice FROM Products

Ardından, Ekle sekmesinden aşağıdaki INSERT ifadesini ekleyin:Then, from the INSERT tab, add the following INSERT statement:

INSERT INTO Products(ProductName, UnitPrice) VALUES(@ProductName, @UnitPrice)

Sihirbazı tamamladıktan sonra DetailsView 'un akıllı etiketine gidin ve "eklemeyi etkinleştir" onay kutusunu işaretleyin.After completing the wizard go to the DetailsView's smart tag and check the "Enable Inserting" checkbox. Bu, DetailsView öğesine ShowInsertButton özelliği true olarak ayarlanmış bir CommandField ekler.This adds a CommandField to the DetailsView with its ShowInsertButton property set to true. Bu DetailsView yalnızca veri eklemek için kullanılacağından, DetailsView 'un DefaultMode özelliğini Insertolarak ayarlayın.Because this DetailsView will be used solely for inserting data, set the DetailsView's DefaultMode property to Insert.

İşte bu kadar kolay!That's all there is to it! Bu sayfayı test edelim.Let's test this page. AddProduct.aspx bir tarayıcı aracılığıyla ziyaret edin, bir ad ve fiyat girin (bkz. Şekil 6).Visit AddProduct.aspx through a browser, enter a name and price (see Figure 6).

Veritabanına yeni bir ürün eklemek Add a New Product to the Database

Şekil 06: veritabanına yeni bir ürün ekleme (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 06: Add a New Product to the Database (Click to view full-size image)

Yeni ürününüzün adını ve fiyatını yazdıktan sonra Ekle düğmesine tıklayın.After typing in the name and price for your new product, click the Insert button. Bu, formun geri göndermeye neden olur.This causes the form to postback. Geri göndermede, SqlDataSource denetiminin INSERT deyimleri yürütülür; iki parametresi, DetailsView 'un iki metin kutusu denetimlerinde Kullanıcı tarafından girilen değerlerle doldurulur.On postback, the SqlDataSource control's INSERT statement is executed; its two parameters are populated with the user-entered values in the DetailsView's two TextBox controls. Ne yazık ki, bir ekleme gerçekleştiyse görsel geri bildirim yok.Unfortunately, there is no visual feedback that an insert has occurred. Yeni bir kaydın eklendiğini onaylayan bir ileti görüntülenmesi iyi bir hale gelir.It would be nice to have a message displayed, confirming that a new record has been added. Bunu okuyucu için bir alıştırma olarak bırakıyorum.I leave this as an exercise for the reader. Ayrıca, DetailsView 'tan yeni bir kayıt eklendikten sonra ana sayfada GridView, önceki ile aynı beş kaydı gösterir; yalnızca eklenen kaydı içermez.Also, after adding a new record from the DetailsView the GridView in the master page still shows the same five records as before; it does not include the just-added record. Yaklaşan adımlarda bunu nasıl ortadan sileceğiz.We'll examine how to remedy this in the upcoming steps.

Note

Ekleme işlemi başarılı olan bazı görsel geri bildirimleri eklemenin yanı sıra, Ayrıca, DetailsView 'un doğrulama arabirimini de içerecek şekilde güncelleştirmeniz önerilir.In addition to adding some form of visual feedback that the insert has succeeded, I'd encourage you to also update the DetailsView's inserting interface to include validation. Şu anda doğrulama yok.Currently, there is no validation. Bir Kullanıcı UnitPrice alanı için geçersiz bir değer girerse (örneğin, "çok pahalı"), sistem bu dizeyi bir Decimal 'e dönüştürmeye çalıştığında geri gönderme sırasında bir özel durum atılır.If a user enters an invalid value for the UnitPrice field, such as "Too expensive," an exception will be thrown on postback when the system attempts to convert that string into a decimal. Ekleme arabirimini özelleştirme hakkında daha fazla bilgi için veri değişim arabirimi öğreticisini veri öğreticisi ile çalışma öğreticidenözelleştirme bölümüne bakın.For more information on customizing the inserting interface, refer to the Customizing the Data Modification Interface tutorial from my Working with Data tutorial series.

3. Adım: Ana sayfada ortak özellikler ve Yöntemler oluşturmaStep 3: Creating Public Properties and Methods in the Master Page

1. adımda, ana sayfada GridView 'un üzerinde GridMessage adlı bir etiket Web denetimi ekledik.In Step 1 we added a Label Web control named GridMessage above the GridView in the master page. Bu etiketin isteğe bağlı olarak bir ileti görüntülemesi amaçlanmıştır.This Label is intended to optionally display a message. Örneğin, Products tabloya yeni bir kayıt eklendikten sonra, "ProductName veritabanına eklenmiş" iletisini şöyle göstermek isteyebilirsiniz.For example, after adding a new record to the Products table, we might want to show a message that reads: "ProductName has been added to the database." Ana sayfada bu etiketin metnini sabit koda eklemek yerine, iletinin içerik sayfası tarafından özelleştirilebilir olmasını isteyebilir.Rather than hard-code the text for this Label in the master page, we might want the message to be customizable by the content page.

Etiket denetimi ana sayfa içinde korumalı üye değişkeni olarak uygulandığından, doğrudan içerik sayfalarından erişilemez.Because the Label control is implemented as a protected member variable within the master page it cannot be accessed directly from content pages. İçerik sayfasından ana sayfa içindeki etiketle çalışmak için (veya bu şekilde, ana sayfadaki herhangi bir Web denetimi), Web denetimini kullanıma sunan ana sayfada bir ortak özellik oluşturmanız veya özelliklerinden birinin bir ara sunucu olarak işlev görmemiz gerekir erişim.In order to work with the Label within a master page from the content page (or, for that matter, any Web control in the master page) we need to create a public property in the master page that exposes the Web control or serves as a proxy by which one of its properties can be accessed. Etiketin Text özelliğini göstermek için ana sayfanın arka plan kod sınıfına aşağıdaki sözdizimini ekleyin:Add the following syntax to the master page's code-behind class to expose the Label's Text property:

public string GridMessageText 
{ 
    get
    { 
        return GridMessage.Text; 
    } 
    set 
    {
        GridMessage.Text = value; 
    }
}

Bir içerik sayfasından Products tablosuna yeni bir kayıt eklendiğinde, ana sayfadaki RecentProducts GridView 'un temel alınan veri kaynağına yeniden bağlanması gerekir.When a new record is added to the Products table from a content page the RecentProducts GridView in the master page needs to rebind to its underlying data source. GridView 'un yeniden bağlamak için DataBind yöntemini çağırın.To rebind the GridView call its DataBind method. Ana sayfadaki GridView, içerik sayfaları için programlı olarak erişilebilir olmadığından, ana sayfada, çağrıldığında verileri GridView 'a yeniden bağlayan bir genel yöntem oluşturuyoruz.Because the GridView in the master page is not programmatically accessible to the content pages, we need to create a public method in the master page that, when called, rebinds the data to the GridView. Aşağıdaki yöntemi ana sayfanın arka plan kod sınıfına ekleyin:Add the following method to the master page's code-behind class:

public void RefreshRecentProductsGrid() 
{ 
    RecentProducts.DataBind();
}

GridMessageText özelliği ve RefreshRecentProductsGrid yöntemi yerine, herhangi bir içerik sayfası programlı olarak GridMessage etiketin Text özelliğinin değerini ayarlayabilir veya okuyabilir veya verileri RecentProducts GridView 'a yeniden bağlayabilirsiniz.With the GridMessageText property and RefreshRecentProductsGrid method in place, any content page can programmatically set or read the value of the GridMessage Label's Text property or rebind the data to the RecentProducts GridView. 4. adım, ana sayfanın ortak özelliklerine ve yöntemlerine bir içerik sayfasından nasıl erişekullanacağınızı inceler.Step 4 examines how to access the master page's public properties and methods from a content page.

Note

Ana sayfanın özelliklerini ve yöntemlerini publicolarak işaretlemeyi unutmayın.Don't forget to mark the master page's properties and methods as public. Bu özellikleri ve yöntemleri publicolarak açıkça belirtmezseniz, içerik sayfasından erişilemeyecektir.If you do not explicitly denote these properties and methods as public, they will not be accessible from the content page.

4. Adım: ana sayfanın ortak üyelerini bir Içerik sayfasından çağırmaStep 4: Calling the Master Page's Public Members from a Content Page

Artık ana sayfada gerekli ortak özellikler ve Yöntemler olduğuna göre, bu özellikleri ve yöntemleri AddProduct.aspx içerik sayfasından çağırmaya hazırız.Now that the master page has the necessary public properties and methods, we're ready to invoke these properties and methods from the AddProduct.aspx content page. Özellikle, ana sayfanın GridMessageText özelliğini ayarlaması ve yeni ürün veritabanına eklendikten sonra RefreshRecentProductsGrid yöntemini çağırması gerekir.Specifically, we need to set the master page's GridMessageText property and call its RefreshRecentProductsGrid method after the new product has been added to the database. Tüm ASP.NET Data Web verileri, çeşitli görevleri tamamladıktan hemen önce ve sonra olayları harekete geçirdikten sonra, bu da sayfa geliştiricilerinin görevden önce veya sonra bazı programlı eylemler yapmasını kolaylaştırır.All the ASP.NET data Web controls fire events immediately before and after completing various tasks, which make it easy for page developers to take some programmatic action either before or after the task. Örneğin, Son Kullanıcı DetailsView 'un INSERT düğmesine tıkladığında, geri gönderme sırasında DetailsView, ekleme iş akışı başlamadan önce ItemInserting olayını oluşturur.For example, when the end user clicks the DetailsView's Insert button, on postback the DetailsView raises its ItemInserting event before beginning the inserting workflow. Daha sonra kaydı veritabanına ekler.It then inserts the record into the database. Bunun ardından, DetailsView ItemInserted olayını oluşturur.Following that, the DetailsView raises its ItemInserted event. Bu nedenle, yeni ürün eklendikten sonra ana sayfayla çalışmak için, DetailsView 'un ItemInserted olayı için bir olay işleyicisi oluşturun.Therefore, in order to work with the master page after the new product has been added, create an event handler for the DetailsView's ItemInserted event.

Bir içerik sayfasının, ana sayfası ile programlı bir şekilde arabirim oluşturma için iki yol vardır:There are two ways that a content page can programmatically interface with its master page:

  • Ana sayfaya gevşek olarak yazılmış bir başvuru döndüren Page.Master özelliğini kullanma veyaUsing the Page.Master property, which returns a loosely-typed reference to the master page, or
  • Bir @MasterType yönergesi aracılığıyla sayfanın ana sayfa türünü veya dosya yolunu belirtin; Bu, Masteradlı sayfaya otomatik olarak türü kesin belirlenmiş bir özellik ekler.Specify the page's master page type or file path via a @MasterType directive; this automatically adds a strongly-typed property to the page named Master.

Her iki yaklaşımı de inceleyelim.Let's examine both approaches.

Gevşek yazılıPage.Masterözelliğini kullanmaUsing the Loosely-TypedPage.MasterProperty

Tüm ASP.NET Web sayfaları, System.Web.UI ad alanında bulunan Page sınıfından türetilmelidir.All ASP.NET web pages must derive from the Page class, which is located in the System.Web.UI namespace. Page sınıfı, sayfanın ana sayfasına bir başvuru döndüren bir Master özelliği içerir.The Page class includes a Master property that returns a reference to the page's master page. Sayfada bir ana sayfa yoksa Master nulldöndürür.If the page does not have a master page Master returns null.

Master özelliği, tüm ana sayfaların türevi olan temel tür olan MasterPage türünde (Ayrıca System.Web.UI ad alanında bulunan) bir nesne döndürür.The Master property returns an object of type MasterPage (also located in the System.Web.UI namespace) which is the base type from which all master pages derive from. Bu nedenle, Web sitenizin ana sayfasında tanımlanan ortak özellikleri veya yöntemleri kullanmak için Master özelliğinden döndürülen MasterPage nesnesini uygun türe atamalısınız.Therefore, to use public properties or methods defined in our website's master page we must cast the MasterPage object returned from the Master property to the appropriate type. Ana sayfa dosyası Site.masteradlandırdığımız için, arka plan kod sınıfı Siteolarak adlandırılmıştır.Because we named our master page file Site.master, the code-behind class was named Site. Bu nedenle, aşağıdaki kod Page.Master özelliğini site sınıfının bir örneğine yayınlar.Therefore, the following code casts the Page.Master property to an instance of the Site class.

// Cast the loosely-typed Page.Master property and then set the GridMessageText property 
Site myMasterPage = Page.Master as Site;

Artık gevşek yazılı Page.Master özelliğini Site türüne güncelleştirdik. Bu özellik, siteye özgü özelliklere ve yöntemlere başvuracağız.Now that we have casted the loosely-typed Page.Master property to the Site type we can reference the properties and methods specific to Site. Şekil 7 ' de gösterildiği gibi, ortak özellik GridMessageText IntelliSense açılır penceresinde görünür.As Figure 7 shows, the public property GridMessageText appears in the IntelliSense drop-down.

IntelliSense ana sayfanın ortak özelliklerini ve yöntemlerini gösterirIntelliSense Shows our Master Page's Public Properties and Methods

Şekil 07: IntelliSense ana sayfanın ortak özelliklerini ve yöntemlerini gösterir (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 07: IntelliSense Shows our Master Page's Public Properties and Methods (Click to view full-size image)

Note

Ana sayfa dosyanızı MasterPage.master, ana sayfanın arka plan kod sınıfı adı MasterPage.If you named your master page file MasterPage.master then the master page's code-behind class name is MasterPage. Bu, System.Web.UI.MasterPage türünden MasterPage sınıfınıza atama yaparken belirsiz koda yol açabilir.This can lead to ambiguous code when casting from the type System.Web.UI.MasterPage to your MasterPage class. Kısacası,, Web sitesi proje modeli kullanılırken biraz daha karmaşık olabilecek bir şekilde, atama yaptığınız türü tam olarak nitelemeniz gerekir.In short, you need to fully qualify the type you are casting to, which can be a little tricky when using the Web Site Project model. Önerim, ana sayfanızı MasterPage.master dışında bir adla adlandırdığınızı veya daha da iyi bir şekilde, ana sayfaya kesin olarak yazılmış bir başvuru oluşturmanız durumunda olduğundan emin olmak olacaktır.My suggestion would be to either make sure that when you create your master page you name it something other than MasterPage.master or, even better, create a strongly-typed reference to the master page.

@MasterTypeyönergesi ile kesin türü belirtilmiş bir başvuru oluşturmaCreating a Strongly-Typed Reference with the@MasterTypeDirective

Bir ASP.NET sayfasının arka plan kod sınıfının kısmi bir sınıf olduğunu görebilirsiniz (sınıf tanımındaki partial anahtar sözcüğünü unutmayın).If you look closely you can see that an ASP.NET page's code-behind class is a partial class (note the partial keyword in the class definition). Kısmi sınıflar, ve Visual Basic C# with.NET Framework 2,0 ' de tanıtılmıştı ve bir Nutshell içinde, bir sınıfın üyelerinin birden çok dosya genelinde tanımlanmasını sağlar.Partial classes were introduced in C# and Visual Basic with.NET Framework 2.0 and, in a nutshell, allow for a class's members to be defined across multiple files. Arka plan kod dosyası AddProduct.aspx.cs(örneğin,), yaptığımız kodu, sayfa geliştiricisi, oluşturma ' yı içerir.The code-behind class file - AddProduct.aspx.cs, for example - contains the code that we, the page developer, create. ASP.NET motoru, kodumuza ek olarak, bildirim temelli biçimlendirmeyi sayfanın sınıf hiyerarşisine çeviren, içindeki Özellikler ve olay işleyicileri ile ayrı bir sınıf dosyası oluşturur.In addition to our code, the ASP.NET engine automatically creates a separate class file with properties and event handlers in that translate the declarative markup into the page's class hierarchy.

Bir ASP.NET sayfası her ziyaret edildiğinde oluşan otomatik kod oluşturma, bazı ilginç ve yararlı olanaklar için bir yol sunar.The automatic code generation that occurs whenever an ASP.NET page is visited paves the way for some rather interesting and useful possibilities. Ana sayfalar söz konusu olduğunda, ASP.NET Engine 'e içerik sayfamız tarafından hangi ana sayfanın kullanıldığını söylüyoruz, bizim için kesin olarak belirlenmiş Master bir özellik oluşturur.In the case of master pages, if we tell the ASP.NET engine what master page is being used by our content page it generates a strongly-typed Master property for us.

İçerik sayfasının ana sayfa türünün ASP.NET altyapısını bilgilendirmek için @MasterType yönergesini kullanın.Use the @MasterType directive to inform the ASP.NET engine of the content page's master page type. @MasterType yönergesi, ana sayfanın ya da dosya yolunun tür adını kabul edebilir.The @MasterType directive can accept either the type name of the master page or its file path. AddProduct.aspx sayfanın ana sayfa olarak Site.master kullandığını belirtmek için, AddProduct.aspxen üstüne aşağıdaki yönergeyi ekleyin:To specify that the AddProduct.aspx page uses Site.master as its master page, add the following directive to the top of AddProduct.aspx:

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

Bu yönerge, ASP.NET altyapısına Masteradlı bir özellik aracılığıyla ana sayfaya kesin olarak yazılmış bir başvuru eklemesini söyler.This directive instructs the ASP.NET engine to add a strongly-typed reference to the master page through a property named Master. @MasterType yönergesi yerine, Site.master ana sayfanın ortak özelliklerini ve yöntemlerini, herhangi bir yayını olmadan doğrudan Master özelliği aracılığıyla çağırabiliriz.With the @MasterType directive in place, we can call the Site.master master page's public properties and methods directly through the Master property without any casts.

Note

@MasterType yönergesini atlarsanız, sözdizimi Page.Master ve Master aynı şeyi döndürür: sayfanın ana sayfasına gevşek olarak yazılmış bir nesne.If you omit the @MasterType directive, the syntax Page.Master and Master return the same thing: a loosely-typed object to the page's master page. @MasterType yönergesini eklerseniz Master belirtilen ana sayfaya kesin olarak yazılmış bir başvuru döndürür.If you include the @MasterType directive then Master returns a strongly-typed reference to the specified master page. Ancak Page.Master, yine de gevşek olarak yazılmış bir başvuru döndürür.Page.Master, however, still returns a loosely-typed reference. Bu durumun neden olduğu ve @MasterType yönergesi dahil Master özelliğinin nasıl oluşturulduğu hakkında daha fazla bilgi için, bkz. ASP.NET 2,0 ' de K. Scott Allen'un blog girdisi@MasterType.For a more thorough look at why this is the case and how the Master property is constructed when the @MasterType directive is included, see K. Scott Allen's blog entry @MasterType in ASP.NET 2.0.

Yeni ürün eklendikten sonra ana sayfayı güncelleştirmeUpdating the Master Page After Adding a New Product

Artık, bir ana sayfanın ortak özelliklerini ve yöntemlerini bir içerik sayfasından nasıl çağırabileceğinizi öğrendiğimiz için, yeni bir ürün eklendikten sonra ana sayfanın yenilenmesi için AddProduct.aspx sayfasını güncelleştirmeye hazır hale getiriyoruz.Now that we know how to invoke a master page's public properties and methods from a content page, we're ready to update the AddProduct.aspx page so that the master page is refreshed after adding a new product. Adım 4 ' ün başlangıcında, yeni ürün veritabanına eklendikten hemen sonra çalıştırılan DetailsView denetiminin ItemInserting olayı için bir olay işleyicisi oluşturdunuz.At the beginning of Step 4 we created an event handler for the DetailsView control's ItemInserting event, which executes immediately after the new product has been added to the database. Aşağıdaki kodu bu olay işleyicisine ekleyin:Add the following code to that event handler:

protected void NewProduct_ItemInserted(object sender, DetailsViewInsertedEventArgs e) 
{ 
    // Cast the loosely-typed Page.Master property and then set the GridMessageText property 
    Site myMasterPage = Page.Master as Site; 
    myMasterPage.GridMessageText = string.Format("{0} added to grid...", e.Values["ProductName"]); 
    // Use the strongly-typed Master property 
    Master.RefreshRecentProductsGrid();
}

Yukarıdaki kod hem gevşek türü belirlenmiş Page.Master özelliğini hem de kesin türü belirtilmiş Master özelliğini kullanır.The above code uses both the loosely-typed Page.Master property and the strongly-typed Master property. GridMessageText özelliğinin "ProductName to Grid 'e eklenmiş" olarak ayarlandığını unutmayın. Yeni eklenen ürünün değerlerine e.Values koleksiyonu aracılığıyla erişilebilir. Gördüğünüz gibi, tam eklenen ProductName değerine e.Values["ProductName"]aracılığıyla erişilir.Note that the GridMessageText property is set to "ProductName added to grid..." The just-added product's values are accessible through the e.Values collection; as you can see, the just-added ProductName value is accessed via e.Values["ProductName"].

Şekil 8 ' de, veritabanına yeni bir ürün-Scott 'ın soda ' i eklendikten hemen sonra AddProduct.aspx sayfası gösterilir.Figure 8 shows the AddProduct.aspx page immediately after a new product - Scott's Soda - has been added to the database. Yeni eklenen ürün adının ana sayfanın etiketinde Not edileceğini ve GridView 'un ürünü ve fiyatını içerecek şekilde yenilendiğini unutmayın.Note that the just-added product name is noted in the master page's Label and that the GridView has been refreshed to include the product and its price.

Ana sayfanın etiketi ve GridView , tam eklenen ürünü gösterirThe Master Page's Label and GridView Show the Just-Added Product

Şekil 08: ana sayfanın etiketi ve GridView, tek eklenen ürünü gösterir (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 08: The Master Page's Label and GridView Show the Just-Added Product (Click to view full-size image)

ÖzetSummary

İdeal olarak, bir ana sayfa ve içerik sayfaları diğerinden tamamen ayrıdır ve etkileşim düzeyi gerektirmez.Ideally, a master page and its content pages are completely separate from one another and require no level of interaction. Ana sayfalar ve içerik sayfaları bu hedefle birlikte tasarlanmalıdır, ancak bir içerik sayfasının ana sayfasıyla arabirim olması gereken birçok yaygın senaryo vardır.While master pages and content pages should be designed with that goal in mind, there are a number of common scenarios in which a content page must interface with its master page. En yaygın nedenlerden biri, ana sayfanın belirli bir bölümünü güncelleştirme etrafında, içerik sayfasında transpired olan bazı eylemlere göre görüntüler.One of the most common reasons centers around updating a particular portion of the master page display based on some action that transpired in the content page.

İyi haber, bir içerik sayfasının programlı olarak ana sayfasıyla etkileşimde bulunması görece bir işlemdir.The good news is that it's relatively straightforward to have a content page programmatically interact with its master page. Ana sayfada bir içerik sayfası tarafından çağrılması gereken işlevselliği kapsülleyen ortak özellikler veya yöntemler oluşturarak başlayın.Start by creating public properties or methods in the master page that encapsulate the functionality that needs to be invoked by a content page. Ardından içerik sayfasında, gevşek olarak yazılmış Page.Master özelliği aracılığıyla ana sayfanın özelliklerine ve yöntemlerine erişin veya ana sayfaya kesin olarak yazılmış bir başvuru oluşturmak için @MasterType yönergesini kullanın.Then, in the content page, access the master page's properties and methods through the loosely-typed Page.Master property or use the @MasterType directive to create a strongly-typed reference to the master page.

Sonraki öğreticide, ana sayfanın programlama yoluyla içerik sayfalarından biriyle nasıl etkileşime gireceğini inceleyeceğiz.In the next tutorial we examine how to have the master page programmatically interact with one of its content pages.

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 müşteri adayı gözden geçireni, Zack Jones idi.Lead reviewer for this tutorial was Zack Jones. 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