Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
tarafından Scott Mitchell
İçerik Sayfasındaki koddan Ana Sayfanın yöntemlerini çağırmayı, özellikleri ayarlamayı vb. inceler.
Giriş
Son beş öğretici boyunca ana sayfa oluşturma, içerik bölgeleri tanımlama, ASP.NET sayfaları ana sayfaya bağlama ve sayfaya özgü içerik tanımlama adımlarını inceledik. Bir ziyaretçi belirli bir içerik sayfası istediğinde, içerik ve ana sayfaların işaretlemesi çalışma zamanında birleştirilir ve bu da birleşik denetim hiyerarşisinin işlenmesine neden olur. Bu nedenle, ana sayfanın ve içerik sayfalarından birinin etkileşim kurabileceği bir yol gördük: içerik sayfası, ana sayfanın ContentPlaceHolder denetimlerine dönüştürme yapmak için işaretlemeyi heceler.
Henüz incelemediğimiz şey, ana sayfanın ve içerik sayfasının program aracılığıyla nasıl etkileşim kurabileceğidir. Bir içerik sayfası, ana sayfanın ContentPlaceHolder denetimleri için işaretleme tanımlamaya ek olarak, ana sayfasının genel özelliklerine değerler atayabilir ve ortak yöntemlerini çağırabilir. Benzer şekilde, bir ana sayfa içerik sayfalarıyla etkileşime geçebilir. Ana ve içerik sayfası arasındaki programlı etkileşim, bildirim temelli işaretlemeleri arasındaki etkileşimden daha az yaygın olsa da, bu tür programlı etkileşimin gerekli olduğu birçok senaryo vardır.
Bu öğreticide, bir içerik sayfasının ana sayfasıyla program aracılığıyla nasıl etkileşim kurabileceğini inceleyeceğiz; sonraki öğreticide, ana sayfanın içerik sayfalarıyla benzer şekilde nasıl etkileşim kurabileceğine bakacağız.
İçerik Sayfası ile Ana Sayfası Arasında Programlı Etkileşim Örnekleri
Sayfanın belirli bir bölgesinin sayfa sayfa yapılandırılması gerektiğinde ContentPlaceHolder denetimi kullanırız. Peki sayfaların çoğunluğunun belirli bir çıktı yaymaya ihtiyacı olan ancak az sayıda sayfanın başka bir şey göstermek için özelleştirmesi gereken durumlar ne olacak? Birden Çok ContentPlaceHolders ve Varsayılan İçerik öğreticisinde incelediğimiz bu tür bir örnek, her sayfada bir oturum açma arabirimi görüntülemeyi içerir. Sayfaların çoğu bir oturum açma arabirimi içermelidir, ancak aşağıdakiler gibi birkaç sayfa için gizlenmelidir: ana oturum açma sayfası (Login.aspx
); Hesap Oluştur sayfası ve yalnızca kimliği doğrulanmış kullanıcılar tarafından erişilebilen diğer sayfalar. Birden Çok ContentPlaceHolder ve Varsayılan İçerik öğreticisi, ana sayfada bir ContentPlaceHolder için varsayılan içeriğin nasıl tanımlanacağı ve ardından varsayılan içeriğin istenmediği sayfalarda nasıl geçersiz kılınacağı gösterildi.
Bir diğer seçenek de ana sayfada oturum açma arabiriminin gösterilip gösterilmeyeceğini veya gizleneceğini belirten bir ortak özellik veya yöntem oluşturmaktır. Örneğin, ana sayfada, ana sayfadaki Oturum açma denetiminin özelliğini ayarlamak Visible
için değeri kullanılan adlı ShowLoginUI
bir ortak özellik olabilir. Oturum açma kullanıcı arabiriminin gizlenmesi gereken içerik sayfaları, program aracılığıyla özelliğini olarak false
ayarlayabilirShowLoginUI
.
Belki de en yaygın içerik ve ana sayfa etkileşimi örneği, ana sayfada görüntülenen verilerin içerik sayfasında bir eylem tamamlandıktan sonra yenilenmesi gerektiğinde ortaya çıkar. Belirli bir veritabanı tablosundan en son eklenen beş kaydı görüntüleyen bir GridView içeren bir ana sayfa düşünün ve içerik sayfalarından birinin aynı tabloya yeni kayıtlar eklemek için bir arabirim içerdiğini düşünün.
Kullanıcı yeni kayıt eklemek için sayfayı ziyaret ettiğinde ana sayfada en son eklenen beş kaydın görüntülendiğini görür. Yeni kaydın sütunlarının değerlerini doldurduktan sonra formu gönderir. Ana sayfadaki GridView'un EnableViewState
özelliğinin true (varsayılan) olarak ayarlandığını varsayarsak, içeriği görünüm durumundan yeniden yüklenir ve bunun sonucunda veritabanına yeni bir kayıt eklenmiş olsa bile beş aynı kayıt görüntülenir. Bu, kullanıcının kafasını karıştırabilir.
Not
GridView'un görünüm durumunu, her geri göndermede temel alınan veri kaynağına yeniden bağlanması için devre dışı bıraksanız bile, veriler yeni kaydın veritabanına eklendiğinden daha önceki sayfa yaşam döngüsünde GridView'a bağlı olduğundan yeni eklenen kaydı göstermez.
Bunu düzeltmek için, yeni eklenen kaydın ana sayfanın Geri göndermede GridView'da görüntülenmesini sağlamak için, gridview'a yeni kayıt veritabanına eklendikten sonra veri kaynağına yeniden bağlanmasını bildirmeliyiz. Yeni kaydı ekleme arabirimi (ve olay işleyicileri) içerik sayfasında olduğundan ancak yenilenmesi gereken GridView ana sayfada olduğundan bu, içerik ve ana sayfalar arasında etkileşim gerektirir.
ana sayfanın görüntüsünü içerik sayfasındaki bir olay işleyicisinden yenilemek, içerik ve ana sayfa etkileşimi için en yaygın gereksinimlerden biri olduğundan, bu konuyu daha ayrıntılı inceleyelim. Bu öğreticinin indirmesi, web sitesinin App_Data
klasöründe adlı NORTHWIND.MDF
bir Microsoft SQL Server 2005 Express Sürüm veritabanı içerir. Northwind veritabanı, kurgusal bir şirket olan Northwind Traders için ürün, çalışan ve satış bilgilerini depolar.
1. Adım, ana sayfada GridView'da en son eklenen beş ürünü görüntüleme işleminde yol gösterir. 2. Adım, yeni ürünler eklemek için bir içerik sayfası oluşturur. 3. Adım, ana sayfada genel özelliklerin ve yöntemlerin nasıl oluşturulduğuna bakar ve 4. Adım, içerik sayfasından bu özellikler ve yöntemlerle program aracılığıyla nasıl arabirim oluşturulacağını gösterir.
Not
Bu öğretici, ASP.NET verilerle çalışma ayrıntılarını ele almaz. Ana sayfayı verileri görüntüleyecek şekilde ayarlama adımları ve veri eklemeye yönelik içerik sayfası tamamlanmış, ancak kısadır. Verileri görüntülemeye ve eklemeye ve SqlDataSource ve GridView denetimlerini kullanmaya daha ayrıntılı bir bakış için, bu öğreticinin sonundaki Diğer Okumalar bölümündeki kaynaklara bakın.
1. Adım: Ana Sayfada En Son Eklenen Beş Ürünü Görüntüleme
Ana sayfayı Site.master
açın ve öğesine bir Etiket ve GridView denetimi leftContent
<div>
ekleyin. Label'ın Text
özelliğini temizleyin, özelliğini false ID
olarak, EnableViewState
özelliğini GridMessage
ise olarak ayarlayın; GridView'un ID
özelliğini olarak RecentProducts
ayarlayın. Ardından Tasarımcı'dan GridView'un akıllı etiketini genişletin ve yeni bir veri kaynağına bağlamayı seçin. Bu işlem Veri Kaynağı Yapılandırma sihirbazını başlatır. Klasördeki App_Data
Northwind veritabanı bir Microsoft SQL Server veritabanı olduğundan, öğesini seçerek bir SqlDataSource oluşturmayı seçin (bkz. Şekil 1); SqlDataSource adını verin RecentProductsDataSource
.
Şekil 01: GridView'ı Adlı RecentProductsDataSource
SqlDataSource Denetimine Bağlama (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Sonraki adım, hangi veritabanına bağlanılacağını belirtmemizi ister. Açılan listeden NORTHWIND.MDF
veritabanı dosyasını seçin ve İleri'ye tıklayın. Bu veritabanını ilk kez kullandığımız için sihirbaz, bağlantı dizesi içinde Web.config
depolamayı teklif edecektir. adını NorthwindConnectionString
kullanarak bağlantı dizesi depolamasını sağlayın.
Şekil 02: Northwind Veritabanına bağlanma (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Veri Kaynağını Yapılandırma sihirbazı, verileri almak için kullanılan sorguyu belirtebileceğimiz iki araç sağlar:
- Özel bir SQL deyimi veya saklı yordam belirterek veya
- Bir tablo veya görünüm seçip döndürülecek sütunları belirterek
Yalnızca en son eklenen beş ürünü döndürmek istediğimiz için özel bir SQL deyimi belirtmemiz gerekir. Aşağıdaki SELECT sorgusunu kullanın:
SELECT TOP 5 ProductName, UnitPrice FROM Products ORDER BY ProductID DESC
anahtar TOP 5
sözcüğü, sorgudan yalnızca ilk beş kaydı döndürür. Tablonun Products
birincil anahtarı ProductID
, tabloya eklenen her yeni ürünün önceki girdiden daha büyük bir değere sahip olmasını sağlayan bir IDENTITY
sütundur. Bu nedenle, sonuçları ProductID
azalan düzende sıralayarak en son oluşturulan ürünlerle başlayan ürünleri döndürür.
Şekil 03: En Son Eklenen Beş Ürünü Döndürme (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Sihirbazı tamamladıktan sonra Visual Studio, veritabanından döndürülen ve UnitPrice
alanlarını görüntülemek ProductName
üzere GridView için iki BoundField oluşturur. Bu noktada ana sayfanızın bildirim temelli işaretlemesi aşağıdakine benzer bir işaretleme içermelidir:
<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, işaretleme şunları içerir: Etiket Web denetimi (GridMessage
); iki BoundField içeren GridView RecentProducts
ve en son eklenen beş ürünü döndüren bir SqlDataSource denetimi.
Bu GridView oluşturulduktan ve SqlDataSource denetimi yapılandırıldığında, tarayıcı üzerinden web sitesini ziyaret edin. Ş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.
Ş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)
Not
GridView görünümünü temizlemekte çekinmeyin. Bazı öneriler, görüntülenen UnitPrice
değeri para birimi olarak biçimlendirmeyi ve kılavuzun görünümünü geliştirmek için arka plan renklerini ve yazı tiplerini kullanmayı içerir.
2. Adım: Yeni Ürünler Eklemek için İçerik Sayfası Oluşturma
Sonraki görevimiz, kullanıcının tabloya yeni bir ürün Products
ekleyebileceği bir içerik sayfası oluşturmaktır. adlı AddProduct.aspx
klasöre Admin
yeni bir içerik sayfası ekleyin ve bu sayfayı ana sayfaya Site.master
bağlayabilirsiniz. Şekil 5'te, bu sayfa web sitesine eklendikten sonra Çözüm Gezgini gösterilmektedir.
Şekil 05: Klasöre Admin
Yeni ASP.NET Sayfası Ekleme (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Ana Sayfadaki Başlık, Meta Etiketler ve Diğer HTML Üst Bilgilerini Belirtme öğreticisinde, açıkça ayarlanmadıysa sayfanın başlığını oluşturan adlı BasePage
özel bir temel sayfa sınıfı oluşturduğumuza dikkat edin. Sayfanın arka planda kod sınıfına AddProduct.aspx
gidin ve öğesinden BasePage
türetilmiş olmasını sağlayın (öğesinden System.Web.UI.Page
değil).
Son olarak, dosyayı bu ders için bir girdi içerecek şekilde güncelleştirin Web.sitemap
. Denetim Kimliği Adlandırma Sorunları dersinin altına <siteMapNode>
aşağıdaki işaretlemeyi ekleyin:
<siteMapNode url="~/Admin/AddProduct.aspx" title="Content to Master Page Interaction" />
Şekil 6'da gösterildiği gibi, bu <siteMapNode>
öğenin eklenmesi Dersler listesine yansıtılır.
öğesine AddProduct.aspx
dönün. ContentPlaceHolder'ın İçerik denetiminde MainContent
bir DetailsView denetimi ekleyin ve olarak adlandırın NewProduct
. DetailsView'ı adlı NewProductDataSource
yeni bir SqlDataSource denetimine bağlayın. 1. Adım'daki SqlDataSource'ta olduğu gibi, sihirbazı Northwind veritabanını kullanacak şekilde yapılandırın ve özel bir SQL deyimi belirtmeyi seçin. Veritabanına öğe eklemek için DetailsView kullanılacağından, hem deyimini SELECT
hem de deyimini INSERT
belirtmemiz gerekir. Aşağıdaki SELECT
sorguyu kullanın:
SELECT ProductName, UnitPrice FROM Products
Ardından INSERT sekmesinden aşağıdaki INSERT
deyimi ekleyin:
INSERT INTO Products(ProductName, UnitPrice) VALUES(@ProductName, @UnitPrice)
Sihirbazı tamamladıktan sonra DetailsView'ın akıllı etiketine gidin ve "Eklemeyi Etkinleştir" onay kutusunu işaretleyin. Bu, özelliği true olarak ayarlanmış şekilde DetailsView'a ShowInsertButton
bir CommandField ekler. Bu DetailsView yalnızca veri eklemek için kullanılacağından DetailsView özelliğini DefaultMode
olarak Insert
ayarlayın.
İşte bu kadar! Şimdi bu sayfayı test edelim. Tarayıcı üzerinden ziyaret edin AddProduct.aspx
, bir ad ve fiyat girin (bkz. Şekil 6).
Şekil 06: Veritabanına Yeni Ürün Ekleme (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Yeni ürününüzün adını ve fiyatını yazdıktan sonra Ekle düğmesine tıklayın. Bu, formun geri göndermesine neden olur. Geri göndermede, SqlDataSource denetiminin INSERT
deyimi yürütülür; iki parametresi DetailsView'un iki TextBox denetiminde kullanıcı tarafından girilen değerlerle doldurulur. Ne yazık ki eklemenin gerçekleştiğine dair görsel geri bildirim yoktur. Yeni bir kaydın eklendiğini onaylayan bir iletinin görüntülenmesi iyi olur. Bunu okuyucuya alıştırma olarak bırakıyorum. Ayrıca, DetailsView'dan yeni bir kayıt ekledikten sonra ana sayfadaki GridView yine de öncekiyle aynı beş kaydı gösterir; yeni eklenen kaydı içermez. Önümüzdeki adımlarda bunu nasıl düzeltebileceğimizi inceleyeceğiz.
Not
Ekleme işleminin başarılı olduğuna ilişkin bir tür görsel geri bildirim eklemenin yanı sıra DetailsView'un ekleme arabirimini doğrulamayı içerecek şekilde güncelleştirmenizi de öneririz. Şu anda doğrulama yoktur. Kullanıcı alan için "Çok pahalı" gibi geçersiz bir değer girerse, sistem bu dizeyi UnitPrice
ondalık sayıya dönüştürmeyi denediğinde geri gönderme sırasında bir özel durum oluşturulur. Ekleme arabirimini özelleştirme hakkında daha fazla bilgi için Verilerle Çalışma öğreticisi serimdeki Veri Değiştirme Arabirimini Özelleştirme öğreticisine bakın.
3. Adım: Ana Sayfada Genel Özellikler ve Yöntemler Oluşturma
1. Adım'da, ana sayfadaki GridView'un üzerine adlı GridMessage
bir Etiket Web denetimi ekledik. Bu Etiket isteğe bağlı olarak bir ileti görüntülemeye yöneliktir. Örneğin, tabloya Products
yeni bir kayıt ekledikten sonra şu iletiyi göstermek isteyebiliriz: "ProductName veritabanına eklendi." Ana sayfada bu Etiket metnini sabit kodlamak yerine, iletinin içerik sayfası tarafından özelleştirilebilir olmasını isteyebiliriz.
Etiket denetimi ana sayfada korumalı üye değişkeni olarak uygulandığından, içerik sayfalarından doğrudan erişilemez. İçerik sayfasından (veya ana sayfadaki herhangi bir Web denetiminden) bir ana sayfadaki Etiket ile çalışmak için, ana sayfada Web denetimini kullanıma sunan veya özelliklerinden birine erişilebilen bir ara sunucu olarak hizmet veren bir ortak özellik oluşturmamız gerekir. Label özelliğini kullanıma açmak için ana sayfanın arka planda kod sınıfına aşağıdaki söz dizimini Text
ekleyin:
public string GridMessageText
{
get
{
return GridMessage.Text;
}
set
{
GridMessage.Text = value;
}
}
Tabloya içerik sayfasından Products
yeni bir kayıt eklendiğinde, ana sayfadaki RecentProducts
GridView'un temel veri kaynağına yeniden bağlanması gerekir. GridView'u yeniden bağlamak için yöntemini çağırın DataBind
. Ana sayfadaki GridView içerik sayfaları için program aracılığıyla erişilebilir olmadığından, ana sayfada çağrıldığında verileri GridView'a yeniden bağlayan bir genel yöntem oluşturmamız gerekir. Ana sayfanın arka planda kod sınıfına aşağıdaki yöntemi ekleyin:
public void RefreshRecentProductsGrid()
{
RecentProducts.DataBind();
}
GridMessageText
Özellik ve RefreshRecentProductsGrid
yöntem kullanıldığında, herhangi bir içerik sayfası Program aracılığıyla Etiket Text
özelliğinin GridMessage
değerini ayarlayabilir veya okuyabilir ya da verileri GridView'a RecentProducts
yeniden sabitleyebilir. 4. Adım, bir içerik sayfasından ana sayfanın genel özelliklerine ve yöntemlerine erişmeyi inceler.
Not
Ana sayfanın özelliklerini ve yöntemlerini olarak public
işaretlemeyi unutmayın. Bu özellikleri ve yöntemleri olarak public
açıkça belirtirseniz, içerik sayfasından bunlara erişilemez.
4. Adım: İçerik Sayfasından Ana Sayfanın Genel Üyelerini Çağırma
Artık ana sayfa gerekli genel özelliklere ve yöntemlere sahip olduğuna göre, içerik sayfasından bu özellikleri ve yöntemleri AddProduct.aspx
çağırmaya hazırız. Özellikle, ana sayfanın GridMessageText
özelliğini ayarlamamız ve yeni ürün veritabanına eklendikten sonra yöntemini çağırmamız RefreshRecentProductsGrid
gerekir. Tüm ASP.NET verileri Web denetimleri, çeşitli görevleri tamamlamadan hemen önce ve sonra olayları tetikler ve bu da sayfa geliştiricilerinin görevden önce veya sonra programlı eylem gerçekleştirmesini kolaylaştırır. Örneğin, son kullanıcı DetailsView'ın Ekle düğmesine tıkladığında, geri göndermede DetailsView ekleme iş akışına başlamadan önce olayını tetikler ItemInserting
. Ardından kaydı veritabanına ekler. Bundan sonra DetailsView olayı tetikler ItemInserted
. Bu nedenle, yeni ürün eklendikten sonra ana sayfayla çalışmak için DetailsView'ın ItemInserted
olayı için bir olay işleyicisi oluşturun.
İçerik sayfasının ana sayfasıyla program aracılığıyla arabirim oluşturmanın iki yolu vardır:
- Ana sayfaya
Page.Master
gevşek yazılan bir başvuru döndüren özelliğini kullanma veya - Bir yönerge aracılığıyla
@MasterType
sayfanın ana sayfa türünü veya dosya yolunu belirtin; bu, adlıMaster
sayfaya otomatik olarak kesin olarak belirlenmiş bir özellik ekler.
Her iki yaklaşımı da inceleyelim.
Gevşek TürlenmişPage.Master
Özelliği Kullanma
Tüm ASP.NET web sayfaları, ad alanında bulunan sınıfından System.Web.UI
türetilmelidirPage
. sınıfı, Page
sayfanın ana sayfasına başvuru döndüren bir özellik içerirMaster
. Sayfada ana sayfa Master
yoksa döndürür null
.
özelliği, Master
tüm ana sayfaların türetildiği temel tür olan türünde MasterPage
bir nesne (ad alanında da bulunur System.Web.UI
) döndürür. Bu nedenle, web sitemizin ana sayfasında tanımlanan genel özellikleri veya yöntemleri kullanmak için özelliğinden Master
döndürülen nesneyi uygun türe atamamız MasterPage
gerekir. Ana sayfa dosyamızı Site.master
adlandırdığımız için arka planda kod sınıfı olarak adlandırıldı Site
. Bu nedenle, aşağıdaki kod özelliğini Site sınıfının bir örneğine yayınlar Page.Master
.
// Cast the loosely-typed Page.Master property and then set the GridMessageText property
Site myMasterPage = Page.Master as Site;
Artık gevşek türe sahip Page.Master
özelliği türüne Site
dönüştürdük, Siteye özgü özelliklere ve yöntemlere başvurabiliriz. Şekil 7'de gösterildiği gibi, ortak özellik GridMessageText
IntelliSense açılan listesinde görünür.
Şekil 07: IntelliSense Ana Sayfamızın Genel Özelliklerini ve Yöntemlerini Gösterir (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Not
Ana sayfa dosyanızı MasterPage.master
adlandırdıysanız, ana sayfanın arka planda kod sınıf adı olur MasterPage
. Bu, türünden System.Web.UI.MasterPage
sınıfınıza MasterPage
yayın yaparken belirsiz koda yol açabilir. Kısacası, Web Sitesi Projesi modelini kullanırken biraz karmaşık olabilecek, atama yaptığınız türü tam olarak nitelemeniz gerekir. Önerim, ana sayfanızı oluşturduğunuzda ana sayfaya daha farklı MasterPage.master
bir ad verin veya daha da iyisi ana sayfaya kesin olarak yazılan bir başvuru oluşturun.
Yönergesi ile@MasterType
Kesin TüreMiş Bir Başvuru Oluşturma
Yakından bakarsanız, ASP.NET sayfasının arka planda kod sınıfının kısmi bir sınıf olduğunu görebilirsiniz (sınıf tanımındaki anahtar sözcüğü not edin partial
). Kısmi sınıflar C# ve Visual Basic with.NET Framework 2.0'da kullanıma sunulmuştur ve özetle bir sınıfın üyelerinin birden çok dosyada tanımlanmasına olanak tanır. Arka planda kod sınıfı dosyası ( AddProduct.aspx.cs
örneğin, ) sayfa geliştiricisi olarak oluşturduğumuz kodu içerir. Kodumuza ek olarak, ASP.NET altyapısı, bildirim temelli işaretlemeyi sayfanın sınıf hiyerarşisine çeviren özellikleri ve olay işleyicilerini içeren ayrı bir sınıf dosyasını otomatik olarak oluşturur.
bir ASP.NET sayfası ziyaret edilirken gerçekleşen otomatik kod oluşturma, oldukça ilginç ve kullanışlı olasılıkların önünü açar. Ana sayfalar söz konusu olduğunda, ASP.NET altyapısına içerik sayfamız tarafından hangi ana sayfanın kullanıldığını söylersek, bizim için kesin olarak belirlenmiş Master
bir özellik oluşturur.
@MasterType
İçerik sayfasının ana sayfa türünün ASP.NET altyapısını bilgilendirmek için yönergesini kullanın. yönergesi @MasterType
, ana sayfanın tür adını veya dosya yolunu kabul edebilir. Sayfanın ana sayfası olarak kullanacağını AddProduct.aspx
Site.master
belirtmek için, öğesinin en üstüne AddProduct.aspx
aşağıdaki yönergeyi ekleyin:
<%@ MasterType VirtualPath="~/Site.master" %>
Bu yönerge, ASP.NET altyapısına adlı Master
bir özellik aracılığıyla ana sayfaya kesin olarak belirlenmiş bir başvuru eklemesini sağlar. yönergesi @MasterType
kullanıldığında, ana sayfanın genel özelliklerini ve yöntemlerini herhangi bir atama olmadan doğrudan özelliği aracılığıyla Master
çağırabilirizSite.master
.
Not
Yönergesini @MasterType
atlarsanız, söz dizimi Page.Master
ve Master
aynı şeyi döndürür: sayfanın ana sayfasına gevşek yazılan bir nesne. yönergesini @MasterType
Master
eklerseniz, belirtilen ana sayfaya kesin olarak belirtilmiş bir başvuru döndürür. Page.Master
ancak, yine de gevşek türde bir başvuru döndürür. Bu durumun neden böyle olduğuna ve yönerge dahil edildiğinde özelliğin Master
nasıl oluşturulur olduğuna daha ayrıntılı bir bakış için bkz. K. Scott Allen'ın ASP.NET 2.0'daki blog girdisi@MasterType
.@MasterType
Yeni Ürün Ekledikten Sonra Ana Sayfayı Güncelleştirme
Artık bir içerik sayfasından ana sayfanın genel özelliklerini ve yöntemlerini çağırmayı bildiğimize göre, yeni bir ürün ekledikten sonra ana sayfanın yenilenmesi için sayfayı güncelleştirmeye AddProduct.aspx
hazırız. 4. Adımın başında DetailsView denetiminin ItemInserting
olayı için yeni ürün veritabanına eklendikten hemen sonra yürütülen bir olay işleyicisi oluşturduk. Bu olay işleyicisine aşağıdaki kodu ekleyin:
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ürlenmiş Page.Master
özelliği hem de kesin olarak türü belirlenmiş Master
özelliği kullanır. Özelliğinin GridMessageText
"ProductName , kılavuza eklendi..." olarak ayarlandığını unutmayın Yeni eklenen ürünün değerlerine koleksiyon üzerinden e.Values
erişilebilir; gördüğünüz gibi, yeni eklenen ProductName
değere aracılığıyla e.Values["ProductName"]
erişilir.
Şekil 8'de AddProduct.aspx
, veritabanına yeni bir ürün (Scott's Soda) eklendikten hemen sonra sayfa gösterilmektedir. Yeni eklenen ürün adının ana sayfanın Etiketinde not edildiğini ve GridView'un ürünü ve fiyatını içerecek şekilde yenilendiğini unutmayın.
Şekil 08: Ana Sayfanın Etiketi ve GridView Yeni Eklenen Ürünü Gösterir (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Özet
İdeal olarak, ana sayfa ve içerik sayfaları birbirinden tamamen ayrıdır ve etkileşim düzeyi gerektirmez. Ana sayfalar ve içerik sayfaları bu amaç göz önünde bulundurularak tasarlanmalıdır, ancak bir içerik sayfasının ana sayfasıyla arabirim oluşturması gereken bir dizi yaygın senaryo vardır. En yaygın nedenlerden biri, ana sayfanın belirli bir bölümünün güncelleştirilmesiyle ilgili merkezler, içerik sayfasında gerçekleştirilen bazı eylemlere göre görüntülenir.
İyi haber, bir içerik sayfasının program aracılığıyla ana sayfasıyla etkileşim kurmasının nispeten kolay olmasıdır. Başlangıç olarak, ana sayfada bir içerik sayfası tarafından çağrılması gereken işlevselliği kapsülleyen genel özellikler veya yöntemler oluşturun. Ardından, içerik sayfasında, ana sayfanın özelliklerine ve yöntemlerine gevşek yazılan Page.Master
özellik aracılığıyla erişin veya ana sayfaya kesin olarak yazılan bir başvuru oluşturmak için yönergesini kullanın @MasterType
.
Sonraki öğreticide, ana sayfanın içerik sayfalarından biriyle program aracılığıyla nasıl etkileşim kuracaklarını inceleyeceğiz.
Mutlu Programlama!
Daha Fazla Bilgi
Bu öğreticide ele alınan konular hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın:
- ASP.NET'da Verilere Erişme ve Verileri Güncelleştirme
- Ana Sayfaları ASP.NET: İpuçları, Püf Noktaları ve Tuzaklar
@MasterType
ASP.NET 2.0'da- İçerik ve Ana Sayfalar Arasında Bilgi Geçirme
- ASP.NET Öğreticilerinde Verilerle Çalışma
Yazar hakkında
Birden çok ASP/ASP.NET kitabının yazarı ve 4GuysFromRolla.com kurucusu Scott Mitchell, 1998'den beri Microsoft Web teknolojileriyle çalışmaktadır. Scott bağımsız bir danışman, eğitmen ve yazar olarak çalışır. Son kitabı Sams Teach Yourself ASP.NET 3.5 in 24 Hours. Scott'a adresinden mitchell@4GuysFromRolla.com veya adresinden blogu http://ScottOnWriting.NETaracılığıyla ulaşılabilir.
Özel Teşekkürler
Bu öğretici serisi birçok yararlı gözden geçiren tarafından gözden geçirildi. Bu öğreticinin baş gözden geçireni Zack Jones oldu. Yaklaşan MSDN makalelerimi gözden geçirmek istiyor musunuz? Öyleyse, bana bir satır bırakın mitchell@4GuysFromRolla.com