ASP.NET 2.0 Sayfa Modeli

Microsoft tarafından

ASP.NET 1.x'te geliştiricilerin satır içi kod modeliyle arka planda kod modeli arasında seçim hakkı vardı. Arka planda kod, yönergenin Src özniteliği veya CodeBehind özniteliği @Page kullanılarak uygulanabilir. ASP.NET 2.0'da geliştiriciler satır içi kod ile arka planda kod arasında seçim yapmaya devam eder, ancak arka planda kod modelinde önemli geliştirmeler yapılmıştır.

ASP.NET 1.x'te geliştiricilerin satır içi kod modeliyle arka planda kod modeli arasında seçim hakkı vardı. Arka planda kod, yönergenin Src özniteliği veya CodeBehind özniteliği @Page kullanılarak uygulanabilir. ASP.NET 2.0'da geliştiriciler satır içi kod ile arka planda kod arasında seçim yapmaya devam eder, ancak arka planda kod modelinde önemli geliştirmeler yapılmıştır.

Code-Behind Modelinde geliştirmeler

ASP.NET 2.0'da arka planda kod oluşturma modelindeki değişiklikleri tam olarak anlamak için modeli ASP.NET 1.x sürümünde olduğu gibi hızla gözden geçirmek en iyisidir.

ASP.NET 1.x'teki Code-Behind Modeli

ASP.NET 1.x'te arka planda kod modeli bir ASPX dosyasından (Webform) ve programlama kodu içeren arka planda kod dosyasından oluşuyor. İki dosya ASPX dosyasındaki yönergesi @Page kullanılarak bağlanmıştı. ASPX sayfasındaki her denetim, örnek değişkeni olarak arka planda kod dosyasında karşılık gelen bir bildirime sahipti. Arka planda kod dosyası ayrıca olay bağlamaya yönelik kod ve Visual Studio tasarımcısı için gerekli kodu içeriyor. Bu model oldukça iyi çalıştı, ancak ASPX sayfasındaki her ASP.NET öğesi arka planda kod dosyasında karşılık gelen kodu gerektirdiğinden, kod ve içerik arasında gerçek bir ayrım yoktu. Örneğin, bir tasarımcı Visual Studio IDE'nin dışındaki bir ASPX dosyasına yeni bir sunucu denetimi eklediyse, arkadaki kod dosyasında bu denetim için bir bildirim olmaması nedeniyle uygulama bozulabilir.

ASP.NET 2.0'da Code-Behind Modeli

ASP.NET 2.0 bu modelde büyük ölçüde iyileştirir. ASP.NET 2.0'da arka planda kod, ASP.NET 2.0'da sağlanan yeni kısmi sınıflar kullanılarak uygulanır. ASP.NET 2.0'daki arka planda kod sınıfı, sınıf tanımının yalnızca bir bölümünü içeren kısmi bir sınıf olarak tanımlanır. Sınıf tanımının kalan bölümü, çalışma zamanında ASPX sayfası kullanılarak veya Web sitesi önceden derlendiğinde ASP.NET 2.0 tarafından dinamik olarak oluşturulur. Arka planda kod dosyası ile ASPX sayfası arasındaki bağlantı hala @ Page yönergesi kullanılarak kurulur. Ancak, CodeBehind veya Src özniteliği yerine ASP.NET 2.0 artık CodeFile özniteliğini kullanır. Inherits özniteliği, sayfanın sınıf adını belirtmek için de kullanılır.

Tipik bir @ Page yönergesi şöyle görünebilir:

<%@Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

ASP.NET 2.0 arka planda kod dosyasındaki tipik bir sınıf tanımı şöyle görünebilir:

public partial class _Default : System.Web.UI.Page

Not

Şu anda kısmi sınıfları destekleyen tek yönetilen diller C# ve Visual Basic'tir. Bu nedenle, J# kullanan geliştiriciler ASP.NET 2.0'da arka planda kod modelini kullanamaz.

Geliştiriciler artık yalnızca kendi oluşturdukları kodu içeren kod dosyalarına sahip olacağı için yeni model arka planda kod modelini geliştirir. Ayrıca arka planda kod dosyasında örnek değişkeni bildirimleri olmadığından kod ve içeriğin gerçek bir ayrımını sağlar.

Not

ASPX sayfasının kısmi sınıfı olay bağlamasının gerçekleştiği yer olduğundan, Visual Basic geliştiricileri olayları bağlamak için arka planda kodda Handles anahtar sözcüğünü kullanarak küçük bir performans artışı gerçekleştirebilir. C# ile eşdeğer anahtar sözcük yoktur.

Yeni @ Sayfa Yönergesi Öznitelikleri

ASP.NET 2.0, @ Page yönergesine birçok yeni öznitelik ekler. Aşağıdaki öznitelikler ASP.NET 2.0 sürümünde yenidir.

Zaman Uyumsuz

Async özniteliği, sayfayı zaman uyumsuz olarak yürütülecek şekilde yapılandırmanıza olanak tanır. Bu modülün ilerleyen bölümlerinde zaman uyumsuz sayfaları ayrıntılı olarak ele alın.

Zaman Uyumsuz Zaman Aşımı

Zaman uyumsuz sayfalar için zaman aşımı belirtildi. Varsayılan değer 45 saniyedir.

Codefile

CodeFile özniteliği, Visual Studio 2002/2003'teki CodeBehind özniteliğinin yerini alır.

CodeFileBaseClass

CodeFileBaseClass özniteliği, birden çok sayfanın tek bir temel sınıftan türetmesini istediğiniz durumlarda kullanılır. ASP.NET'de kısmi sınıfların uygulanması nedeniyle, bu öznitelik olmadan, ASPX sayfasında bildirilen denetimlere başvurmak için paylaşılan ortak alanları kullanan bir temel sınıf düzgün çalışmaz çünkü ASP. NET derleme altyapısı, sayfadaki denetimlere göre otomatik olarak yeni üyeler oluşturur. Bu nedenle, ASP.NET'da iki veya daha fazla sayfa için ortak bir temel sınıf istiyorsanız, CodeFileBaseClass özniteliğinde temel sınıfınızı belirtmeniz ve ardından her sayfa sınıfını bu temel sınıftan türetmelisiniz. Bu öznitelik kullanıldığında CodeFile özniteliği de gereklidir.

Compilationmode

Bu öznitelik ASPX sayfasının CompilationMode özelliğini ayarlamanıza olanak tanır. CompilationMode özelliği Always, Auto ve Never değerlerini içeren bir numaralandırmadır. Varsayılan değer Her zaman'dır. Otomatik ayarı, ASP.NET mümkünse sayfayı dinamik olarak derlemesini engeller. Sayfaların dinamik derlemeden dışlanması performansı artırır. Ancak, dışlanan bir sayfa derlenmiş olması gereken kodu içeriyorsa, sayfaya göz atıldığında bir hata oluşur.

Olay Doğrulamayı Etkinleştir

Bu öznitelik, geri gönderme ve geri çağırma olaylarının doğrulanıp doğrulanmayacağını belirtir. Bu etkinleştirildiğinde, geri gönderme veya geri çağırma olaylarına yönelik bağımsız değişkenler, bunları ilk olarak işleyen sunucu denetiminden kaynaklandığından emin olmak için denetlenilir.

Temalı Özelliği Etkinleştirme

Bu öznitelik, sayfada ASP.NET temaların kullanılıp kullanılmayacağını belirtir. Varsayılan değer false'tur. ASP.NET temalar Modül 10'da ele alınmıştır.

LinePragmas

Bu öznitelik, derleme sırasında satır pragmaları eklenip eklenmeyeceğini belirtir. Satır pragmaları, hata ayıklayıcıları tarafından kodun belirli bölümlerini işaretlemek için kullanılan seçeneklerdir.

MaintainScrollPositionOnPostback

Bu öznitelik, geri göndermeler arasında kaydırma konumunu korumak için sayfaya JavaScript eklenip eklenmediğini belirtir. Bu öznitelik varsayılan olarak false'tur .

Bu öznitelik true olduğunda, ASP.NET geri göndermeye aşağıdakine benzer bir <betik> bloğu ekler:

<script src="/website/WebResource.axd?d=jBAvpwrdOM_V_Xzeox989A2 &t=632653133849531250" type="text/javascript"> </script>

Bu betik bloğunun src değerinin WebResource.axd olduğuna dikkat edin. Bu kaynak fiziksel bir yol değil. Bu betik istendiğinde, ASP.NET betiği dinamik olarak oluşturur.

Masterpagefile

Bu öznitelik, geçerli sayfa için ana sayfa dosyasını belirtir. Yol göreli veya mutlak olabilir. Ana sayfalar Modül 4'te ele alınmıştır.

Stil Sayfası Teması

Bu öznitelik, ASP.NET 2.0 teması tarafından tanımlanan kullanıcı arabirimi görünüm özelliklerini geçersiz kılmanıza olanak tanır. Temalar Modül 10'da ele alınmıştır.

Tema Değeri

Sayfanın temasını belirtir. StyleSheetTheme özniteliği için bir değer belirtilmezse, Theme özniteliği sayfadaki denetimlere uygulanan tüm stilleri geçersiz kılar.

Başlık Değeri

Sayfanın başlığını ayarlar. Burada belirtilen değer, işlenen sayfanın başlık> öğesinde <görünür.

ViewStateEncryptionMode

ViewStateEncryptionMode sabit listesi değerini ayarlar. Kullanılabilir değerler Always, Auto ve Never değerleridir. Varsayılan değer Otomatik'tir. Bu öznitelik Auto değerine ayarlandığında, viewstate şifrelenir , RegisterRequiresViewStateEncryption yöntemini çağırarak bunu isteyen bir denetim isteğidir.

@ Page Yönergesi aracılığıyla Genel Özellik Değerlerini Ayarlama

ASP.NET 2.0'daki @ Page yönergesinin bir diğer yeni özelliği de bir temel sınıfın ortak özelliklerinin ilk değerini ayarlayabilme özelliğidir. Örneğin, temel sınıfınızda SomeText adlı bir ortak özelliğiniz olduğunu ve bir sayfa yüklendiğinde Bunun Hello olarak başlatılmasını istediğinizi varsayalım. Bunu, @ Page yönergesindeki değeri şöyle ayarlayarak gerçekleştirebilirsiniz:

<%@Page Language="C#" SomeText="Hello!" Inherits="PageBase" %>

@ Page yönergesinin SomeText özniteliği, temel sınıftaki SomeText özelliğinin başlangıç değerini Hello! olarak ayarlar. Aşağıdaki video, @ Page yönergesini kullanarak bir temel sınıftaki bir ortak özelliğin başlangıç değerini ayarlama adım adım izlenecek yoldur.

Satırlardan birinde Some Text özniteliğini gösteren kırmızı ok bulunan Microsoft Visual Studio penceresinin ekran görüntüsü.

Full-Screen Video'Full-Screen açma

Sayfa Sınıfının Yeni Genel Özellikleri

Aşağıdaki genel özellikler ASP.NET 2.0 sürümünde yenidir.

AppRelativeTemplateSourceDirectory

Sayfa veya denetimin uygulama göreli yolunu döndürür. Örneğin, konumunda http://app/folder/page.aspxbulunan bir sayfa için özelliği ~/folder/ döndürür.

AppRelativeVirtualPath

Sayfa veya denetimin göreli sanal dizin yolunu döndürür. Örneğin konumunda http://app/folder/page.aspxbulunan bir sayfa için özelliği ~/folder/page.aspx döndürür.

AsyncTimeout

Zaman uyumsuz sayfa işleme için kullanılan zaman aşımını alır veya ayarlar. (Zaman uyumsuz sayfalar bu modülün ilerleyen bölümlerinde ele alınacaktır.)

ClientQueryString

İstenen URL'nin sorgu dizesi bölümünü döndüren salt okunur bir özellik. Bu değer URL ile kodlanmıştır. HttpServerUtility sınıfının UrlDecode yöntemini kullanarak kodunu çözebilirsiniz.

ClientScript

Bu özellik, ASP'yi yönetmek için kullanılabilecek bir ClientScriptManager nesnesi döndürür. İstemci tarafı betiğinin NET emisyonu. (ClientScriptManager sınıfı bu modülün ilerleyen bölümlerinde ele alınmıştır.)

EnableEventValidation

Bu özellik, olay doğrulamasının geri gönderme ve geri çağırma olayları için etkinleştirilip etkinleştirilmediğini denetler. Etkinleştirildiğinde, geri gönderme veya geri çağırma olaylarına yönelik bağımsız değişkenler, bunları ilk olarak işleyen sunucu denetiminden kaynaklandığından emin olmak için doğrulanır.

Enabletheming

Bu özellik, sayfaya bir ASP.NET 2.0 temasının uygulanıp uygulanmayacağını belirten bir Boole değeri alır veya ayarlar.

Form

Bu özellik, ASPX sayfasındaki HTML formunu htmlform nesnesi olarak döndürür.

Bu özellik, sayfa üst bilgisini içeren bir HtmlHead nesnesine başvuru döndürür. Stil sayfalarını, Meta etiketlerini vb. almak/ayarlamak için döndürülen HtmlHead nesnesini kullanabilirsiniz.

IdSeparator

Bu salt okunur özellik, ASP.NET sayfadaki denetimler için benzersiz bir kimlik oluştururken denetim tanımlayıcılarını ayırmak için kullanılan karakteri alır. Doğrudan kodunuzdan kullanılması amaçlanmamıştır.

IsAsync

Bu özellik zaman uyumsuz sayfalara izin verir. Zaman uyumsuz sayfalar bu modülün ilerleyen bölümlerinde ele alınacaktır.

IsCallback

Sayfa geri aramanın sonucuysa, bu salt okunur özellik true değerini döndürür. Geri aramalar bu modülün ilerleyen bölümlerinde ele alınacaktır.

IsCrossPagePostBack

Sayfa çapraz sayfa geri gönderme işleminin parçasıysa, bu salt okunur özellik true değerini döndürür. Çapraz geri göndermeler bu modülün ilerleyen bölümlerinde ele alınacaktır.

Öğeler

Sayfalar bağlamında depolanan tüm nesneleri içeren bir IDictionary örneğine başvuru döndürür. Bu IDictionary nesnesine öğe ekleyebilirsiniz ve bağlamın kullanım ömrü boyunca bunları kullanabilirsiniz.

MaintainScrollPositionOnPostBack

Bu özellik, ASP.NET bir geri gönderme gerçekleştikten sonra tarayıcıdaki sayfaların kaydırma konumunu koruyan JavaScript yayıp yaymayacağını denetler. (Bu özelliğin ayrıntıları bu modülün başlarında ele alınmıştı.)

Ana

Bu salt okunur özellik, ana sayfanın uygulandığı sayfa için MasterPage örneğine başvuru döndürür.

Masterpagefile

Sayfanın ana sayfa dosya adını alır veya ayarlar. Bu özellik yalnızca PreInit yönteminde ayarlanabilir.

MaxPageStateFieldLength

Bu özellik, bayt cinsinden sayfaların durumu için maksimum uzunluğu alır veya ayarlar. Özellik pozitif bir sayıya ayarlanırsa sayfalar görünümü durumu, belirtilen bayt sayısını aşmaması için birden çok gizli alana bölünecektir. Özellik negatif bir sayıysa, görünüm durumu öbeklere bölünmez.

Pageadapter

İstekte bulunan tarayıcının sayfasını değiştiren PageAdapter nesnesine bir başvuru döndürür.

Previouspage

Server.Transfer veya çapraz sayfa geri gönderme durumlarında önceki sayfaya başvuru döndürür.

Skinıd

Sayfaya uygulanacak ASP.NET 2.0 kaplamasını belirtir.

StyleSheetTheme

Bu özellik, sayfaya uygulanan stil sayfasını alır veya ayarlar.

TemplateControl

Sayfa için içeren denetime bir başvuru döndürür.

Tema

Sayfaya uygulanan ASP.NET 2.0 temasının adını alır veya ayarlar. Bu değer PreInit yönteminden önce ayarlanmalıdır.

Başlık

Bu özellik, sayfalar üst bilgisinden elde edilen sayfanın başlığını alır veya ayarlar.

ViewStateEncryptionMode

Sayfanın ViewStateEncryptionMode değerini alır veya ayarlar. Bu modülün önceki bölümlerinde bu özelliğin ayrıntılı bir açıklamasını inceleyin.

Sayfa Sınıfının Yeni Korumalı Özellikleri

ASP.NET 2.0'da Page sınıfının yeni korumalı özellikleri aşağıdadır.

Bağdaştırıcı

Sayfayı istenen cihazda işleyen ControlAdapter'a bir başvuru döndürür.

AsyncMode

Bu özellik, sayfanın zaman uyumsuz olarak işlenip işlenmediğini gösterir. Doğrudan kodda değil çalışma zamanı tarafından kullanılmak üzere tasarlanmıştır.

ClientIDSeparator

Bu özellik, denetimler için benzersiz istemci kimlikleri oluştururken ayırıcı olarak kullanılan karakteri döndürür. Doğrudan kodda değil çalışma zamanı tarafından kullanılmak üzere tasarlanmıştır.

Pagestatepersister

Bu özellik, sayfa için PageStatePersister nesnesini döndürür. Bu özellik öncelikli olarak ASP.NET denetim geliştiricileri tarafından kullanılır.

UniqueFilePathSuffix

Bu özellik, önbelleğe alma tarayıcıları için dosya yoluna eklenen benzersiz bir sonek döndürür. Varsayılan değer __ufps= ve 6 basamaklı bir sayıdır.

Sayfa Sınıfı için Yeni Genel Yöntemler

Aşağıdaki genel yöntemler, ASP.NET 2.0'da Page sınıfı için yenidir.

Addonprerendercompleteasync

Bu yöntem, zaman uyumsuz sayfa yürütme için olay işleyicisi temsilcilerini kaydeder. Zaman uyumsuz sayfalar bu modülün ilerleyen bölümlerinde ele alınacaktır.

ApplyStyleSheetSkin

Sayfa stil sayfasındaki özellikleri sayfaya uygular.

ExecuteRegisteredAsyncTasks

Bu yöntem zaman uyumsuz bir görevdir.

GetValidators

Belirtilen doğrulama grubu veya belirtilmemişse varsayılan doğrulama grubu için bir doğrulayıcı koleksiyonu döndürür.

RegisterAsyncTask

Bu yöntem yeni bir zaman uyumsuz görev kaydeder. Zaman uyumsuz sayfalar bu modülün ilerleyen bölümlerinde ele alınacaktır.

RegisterRequiresControlState

Bu yöntem, ASP.NET sayfaların denetim durumunun kalıcı olması gerektiğini bildirir.

RegisterRequiresViewStateEncryption

Bu yöntem, ASP.NET viewstate sayfalarının şifreleme gerektirdiğini bildirir.

ResolveClientUrl

Görüntüler için istemci istekleri vb. için kullanılabilecek göreli bir URL döndürür.

SetFocus

Bu yöntem, odağı sayfa ilk yüklendiğinde belirtilen denetime ayarlar.

UnregisterRequiresControlState

Bu yöntem, artık denetim durumu kalıcılığı gerektirmediğinden, ona geçirilen denetimin kaydını kaldıracaktır.

Sayfa Yaşam Döngüsündeki Değişiklikler

ASP.NET 2.0'daki sayfa yaşam döngüsü önemli ölçüde değişmemiştir, ancak bilmeniz gereken bazı yeni yöntemler vardır. ASP.NET 2.0 sayfa yaşam döngüsü aşağıda özetlenmiştir.

PreInit (ASP.NET 2.0 sürümünde yeni)

PreInit olayı, bir geliştiricinin erişebileceği yaşam döngüsünün en erken aşamasıdır. Bu olayın eklenmesi, ASP.NET 2.0 temalarının, ana sayfaların, ASP.NET 2.0 profilinin erişim özelliklerinin program aracılığıyla değiştirilmesini mümkün kılar. Geri gönderme durumundaysanız, Viewstate'in yaşam döngüsünün bu noktasında denetimlere henüz uygulanmadığını fark etmek önemlidir. Bu nedenle, bir geliştirici bu aşamada denetimin bir özelliğini değiştirirse, büyük olasılıkla sayfaların yaşam döngüsünde daha sonra üzerine yazılır.

Init

Init olayı 1.x ASP.NET değişmedi. Burası, sayfanızdaki denetimlerin özelliklerini okumak veya başlatmak istediğiniz yerdir. Bu aşamada ana sayfalar, temalar vb. sayfaya zaten uygulanmış.

InitComplete (2.0 sürümünde yeni)

Sayfa başlatma aşamasının sonunda InitComplete olayı çağrılır. Yaşam döngüsünün bu noktasında, sayfadaki denetimlere erişebilirsiniz, ancak bunların durumu henüz doldurulmamıştır.

PreLoad (2.0 sürümünde yeni)

Bu olay, tüm geri gönderme verileri uygulandıktan sonra ve Page_Load hemen önce çağrılır.

Yükleme

Load olayı 1.x ASP.NET değişmedi.

LoadComplete (2.0 sürümünde yeni)

LoadComplete olayı, sayfaların yükleme aşamasındaki son olaydır. Bu aşamada, tüm geri gönderme ve görünüm durumu verileri sayfaya uygulanmıştır.

Prerender

Sayfaya dinamik olarak eklenen denetimler için viewstate'in düzgün bir şekilde korunmasını istiyorsanız, Bunları eklemek için son fırsat PreRender olayıdır.

PreRenderComplete (2.0 sürümünde yeni)

PreRenderComplete aşamasında, sayfaya tüm denetimler eklenmiştir ve sayfa işlenmeye hazırdır. PreRenderComplete olayı, pages viewstate kaydedilmeden önce tetiklenen son olaydır.

SaveStateComplete (2.0 sürümünde yeni)

SaveStateComplete olayı, tüm sayfa görünüm durumu ve denetim durumu kaydedildikten hemen sonra çağrılır. Bu, sayfa tarayıcıda gerçekten işlenmeden önceki son olaydır.

İşleme

ASP.NET 1.x'ten bu yana İşleme yöntemi değişmedi. Burası HtmlTextWriter'ın başlatıldığı ve sayfanın tarayıcıda işlendiği yerdir.

ASP.NET 2.0'da Çapraz Sayfa Geri Gönderme

ASP.NET 1.x'te, aynı sayfaya posta göndermek için geri göndermeler gerekiyordu. Çapraz sayfa geri göndermelerine izin verilmedi. ASP.NET 2.0, IButtonControl arabirimi aracılığıyla farklı bir sayfaya geri gönderme özelliğini ekler. Yeni IButtonControl arabirimini uygulayan tüm denetimler (Üçüncü taraf özel denetimlere ek olarak Button, LinkButton ve ImageButton), PostBackUrl özniteliğini kullanarak bu yeni işlevden yararlanabilir. Aşağıdaki kod, ikinci bir sayfaya geri gönderilen bir Button denetimini gösterir.

<asp:Button ID="SubmitReport" PostBackUrl="~/Default.aspx" runat="server" Text="Submit Report" />

Sayfa geri gönderildiğinde, geri göndermeyi başlatan Sayfaya ikinci sayfadaki PreviousPage özelliği aracılığıyla erişilebilir. Bu işlevsellik, ASP.NET 2.0'ın bir denetim farklı bir sayfaya geri gönderildiğinde sayfaya işlendiği yeni WebForm_DoPostBackWithOptions istemci tarafı işlevi aracılığıyla uygulanır. Bu JavaScript işlevi, istemciye betik yayan yeni WebResource.axd işleyicisi tarafından sağlanır.

Aşağıdaki video, çapraz sayfa geri gönderme işleminin adım adım kılavuzudur.

Internet Explorer tarayıcı sayfasında Rapor Gönder seçeneğinin görüntülendiği, çapraz sayfa geri gönderme işleminin video kılavuzunun ekran görüntüsü.

Full-Screen Video'Full-Screen aç

Çapraz Sayfa Geri Göndermeleriyle İlgili Diğer Ayrıntılar

Viewstate

Çapraz sayfa geri gönderme senaryosunda ilk sayfadan viewstate'e ne olduğunu zaten kendinize sormuş olabilirsiniz. Ne de olsa, IPostBackDataHandler uygulamayan tüm denetimler viewstate aracılığıyla durumunu devam ettireceğinden, çapraz sayfa geri göndermenin ikinci sayfasında bu denetimin özelliklerine erişebilmek için sayfanın viewstate'ine erişiminiz olmalıdır. ASP.NET 2.0, ikinci sayfada __PREVIOUSPAGE adlı yeni bir gizli alan kullanarak bu senaryoyla ilgilenir. __PREVIOUSPAGE form alanı, ikinci sayfadaki tüm denetimlerin özelliklerine erişebilmeniz için ilk sayfanın viewstate'ini içerir.

FindControl'u aşma

Çapraz sayfa geri göndermenin video kılavuzunda, ilk sayfadaki TextBox denetimine başvuru almak için FindControl yöntemini kullandım. Bu yöntem bu amaç için iyi çalışır, ancak FindControl pahalıdır ve ek kod yazmayı gerektirir. Neyse ki ASP.NET 2.0, birçok senaryoda çalışacak bu amaç için FindControl'e bir alternatif sağlar. PreviousPageType yönergesi, TypeName veya VirtualPath özniteliğini kullanarak önceki sayfaya kesin olarak yazılmış bir başvuruya sahip olmanıza olanak tanır. TypeName özniteliği önceki sayfanın türünü belirtmenizi sağlarken VirtualPath özniteliği bir sanal yol kullanarak önceki sayfaya başvurmanızı sağlar. PreviousPageType yönergesini ayarladıktan sonra denetimleri vb. kullanıma sunmanız gerekir. genel özellikleri kullanarak erişime izin vermek istediğiniz.

Laboratuvar 1 Çapraz Sayfa Geri Gönderme

Bu laboratuvarda, ASP.NET 2.0'ın yeni çapraz sayfa geri gönderme işlevini kullanan bir uygulama oluşturacaksınız.

  1. Visual Studio 2005'i açın ve yeni bir ASP.NET Web sitesi oluşturun.

  2. page2.aspx adlı yeni bir Web formu ekleyin.

  3. Default.aspx dosyasını Tasarım görünümünde açın ve bir Düğme denetimi ile TextBox denetimi ekleyin.

    1. Düğme denetimine SubmitButton kimliği, TextBox denetimine de UserName kimliği verin.
    2. Düğmenin PostBackUrl özelliğini page2.aspx olarak ayarlayın.
  4. Page2.aspx dosyasını Kaynak görünümünde açın.

  5. Aşağıda gösterildiği gibi @ PreviousPageType yönergesi ekleyin:

  6. Aşağıdaki kodu page2.aspx dosyasının arka planda Page_Load ekleyin:

    Response.Write(PreviousPage.UserName.Text);
    
  7. Derleme menüsünde Derle'ye tıklayarak projeyi derleyin.

  8. Default.aspx için aşağıdaki kodu arka planda koda ekleyin:

    public TextBox txtUserName {
        get { return this.UserName; }
    }
    
  9. page2.aspx dosyasındaki Page_Load aşağıdaki şekilde değiştirin:

    Response.Write(PreviousPage.txtUserName.Text);
    
  10. Projeyi derleyin.

  11. Projeyi çalıştırma.

  12. TextBox'a adınızı girin ve düğmeye tıklayın.

  13. Sonuç nedir?

ASP.NET 2.0'da Zaman Uyumsuz Sayfalar

ASP.NET'daki birçok çekişme sorunu, dış çağrıların gecikme süresi (Web hizmeti veya veritabanı çağrıları gibi), dosya GÇ gecikme süresi vb. neden olur. bir ASP.NET uygulamasında istek yapıldığında, ASP.NET bu isteğe hizmet vermek için çalışan iş parçacıklarından birini kullanır. İstek tamamlanana ve yanıt gönderilene kadar bu istek bu iş parçacığının sahibidir. ASP.NET 2.0, sayfaları zaman uyumsuz olarak yürütme özelliğini ekleyerek bu tür sorunlarla ilgili gecikme sorunlarını çözmeye çalışır. Bu, bir çalışan iş parçacığının isteği başlatabileceği ve daha sonra başka bir iş parçacığına ek yürütmeyi devredebileceği ve böylece kullanılabilir iş parçacığı havuzuna hızlı bir şekilde dönebileceği anlamına gelir. Dosya GÇ, veritabanı çağrısı vb. tamamlandı, isteği tamamlamak için iş parçacığı havuzundan yeni bir iş parçacığı alınır.

Bir sayfanın zaman uyumsuz olarak yürütülmesini sağlamanın ilk adımı, sayfa yönergesinin Async özniteliğini şöyle ayarlamaktır:

<%@ Page Async="true" %>

Bu öznitelik, ASP.NET sayfa için IHttpAsyncHandler uygulamasını bildirir.

Sonraki adım, PreRender'den önceki sayfanın yaşam döngüsünde bir noktada AddOnPreRenderCompleteAsync yöntemini çağırmaktır. (Bu yöntem genellikle Page_Load içinde çağrılır.) AddOnPreRenderCompleteAsync yöntemi iki parametre alır; BeginEventHandler ve EndEventHandler. BeginEventHandler, daha sonra EndEventHandler'a parametre olarak geçirilen bir IAsyncResult döndürür.

Aşağıdaki video, zaman uyumsuz bir sayfa isteğinin izlenecek yoludur.

Microsoft Visual Code ekranını gösteren zaman uyumsuz bir sayfa isteğinin video kılavuzunun ekran görüntüsü.

Full-Screen Video'Full-Screen aç

Not

EndEventHandler tamamlanana kadar zaman uyumsuz bir sayfa tarayıcıda işlenmez. Bazı geliştiricilerin zaman uyumsuz istekleri zaman uyumsuz geri çağırmalara benzer olarak düşüneceğinden şüphe yok. Öyle olmadıklarını fark etmek önemlidir. Zaman uyumsuz isteklerin avantajı, yeni isteklere hizmet vermek için ilk çalışan iş parçacığının iş parçacığı havuzuna döndürülerek GÇ bağlı olmasından kaynaklanan çekişmelerin azaltılmasıdır.

ASP.NET 2.0'da Betik Geri Çağırmaları

Web geliştiricileri her zaman bir geri aramayla ilişkili titreşimi önlemenin yollarını aramıştı. ASP.NET 1.x'te SmartNavigation titremeyi önlemenin en yaygın yöntemiydi, ancak SmartNavigation istemcideki uygulamasının karmaşıklığı nedeniyle bazı geliştiriciler için sorunlara neden oldu. ASP.NET 2.0, betik geri çağırmalarıyla ilgili bu sorunu giderir. Betik geri çağırmaları, JavaScript aracılığıyla Web sunucusunda istekte bulunmak için XMLHttp kullanır. XMLHttp isteği, daha sonra tarayıcının DOM'ı aracılığıyla işlenebilen XML verilerini döndürür. XMLHttp kodu, yeni WebResource.axd işleyicisi tarafından kullanıcıdan gizlenir.

ASP.NET 2.0'da bir betik geri çağırma yapılandırmak için gereken birkaç adım vardır.

1. Adım: ICallbackEventHandler Arabirimini Uygulama

ASP.NET sayfanızı bir betik geri çağırmasına katılan olarak tanımak için ICallbackEventHandler arabirimini uygulamanız gerekir. Bunu arka planda kod dosyanızda şu şekilde yapabilirsiniz:

public partial class _Default : System.Web.UI.Page, ICallbackEventHandler

Bunu@ Implements yönergesini kullanarak da yapabilirsiniz:

<%@ Implements Interface="System.Web.UI.ICallbackEventHandler" %>

Satır içi ASP.NET kodu kullanırken genellikle @ Implements yönergesini kullanırsınız.

2. Adım: GetCallbackEventReference'ı çağırma

Daha önce belirtildiği gibi, XMLHttp çağrısı WebResource.axd işleyicisinde kapsüllenmiş. Sayfanız işlendiğinde, ASP.NET WebResource.axd tarafından sağlanan bir istemci betiği olan WebForm_DoCallback'e bir çağrı ekler. WebForm_DoCallback işlevi, geri çağırma için __doPostBack işlevinin yerini alır. __doPostBack formu sayfada program aracılığıyla gönderdiğini unutmayın. Geri çağırma senaryosunda geri göndermeyi önlemek istiyorsunuz, bu nedenle __doPostBack yeterli olmayacaktır.

Not

__doPostBack, bir istemci betiği geri çağırma senaryosunda sayfaya işlenmeye devam ediyor. Ancak, geri çağırma için kullanılmaz.

WebForm_DoCallback istemci tarafı işlevinin bağımsız değişkenleri, normalde Page_Load çağrılan GetCallbackEventReference sunucu tarafı işlevi aracılığıyla sağlanır. Tipik bir GetCallbackEventReference çağrısı şöyle görünebilir:

// Set up the JavaScript callback string cbRef = cm.GetCallbackEventReference(this, "document.getElementById('ddlCompany').value", "ShowCompanyName", "null", true);

Not

Bu durumda, cm bir ClientScriptManager örneğidir. ClientScriptManager sınıfı bu modülün ilerleyen bölümlerinde ele alınacaktır.

GetCallbackEventReference'ın birkaç aşırı yüklenmiş sürümü vardır. Bu durumda bağımsız değişkenler aşağıdaki gibidir:

this

GetCallbackEventReference'ın çağrıldığı denetime başvuru. Bu durumda, sayfanın kendisidir.

document.getElementById('ddlCompany').value

İstemci tarafı kodundan sunucu tarafı olayına geçirilecek dize bağımsız değişkeni. Bu durumda, ddlCompany adlı açılan liste değerini geçiriyor.

ShowCompanyName

Sunucu tarafı geri çağırma olayından dönüş değerini (dize olarak) kabul edecek istemci tarafı işlevinin adı. Bu işlev yalnızca sunucu tarafı geri çağırma başarılı olduğunda çağrılır. Bu nedenle, sağlamlık açısından, genellikle bir hata durumunda yürütülecek istemci tarafı işlevinin adını belirten ek bir dize bağımsız değişkeni alan GetCallbackEventReference'ın aşırı yüklenmiş sürümünü kullanmanız önerilir.

null

Sunucuya geri çağırmadan önce başlattığı istemci tarafı işlevini temsil eden bir dize. Bu durumda böyle bir betik olmadığından bağımsız değişken null olur.

true

Geri çağırmanın zaman uyumsuz olarak yürütülip yürütülmeyeceğini belirten bir Boole değeri.

İstemcide WebForm_DoCallback çağrısı bu bağımsız değişkenleri geçirir. Bu nedenle, bu sayfa istemcide işlendiğinde bu kod şöyle görünür:

WebForm_DoCallback('__Page',document.getElementById('ddlCompany').value, ShowCompanyName,null,null,true)

İstemcideki işlevin imzasının biraz farklı olduğuna dikkat edin. İstemci tarafı işlevi 5 dize ve bir Boole değeri geçirir. Ek dize (yukarıdaki örnekte null) sunucu tarafı geri çağırmadan gelen hataları işleyecek istemci tarafı işlevini içerir.

3. Adım: Client-Side Denetim Olayını Bağlama

Yukarıdaki GetCallbackEventReference dönüş değerinin bir dize değişkenine atandığını unutmayın. Bu dize, geri çağırmayı başlatan denetim için istemci tarafı olayını bağlamak için kullanılır. Bu örnekte, geri arama sayfadaki bir açılan listeyle başlatılır, bu nedenle OnChange olayını bağlamak istiyorum.

İstemci tarafı olayını bağlamak için istemci tarafı işaretlemesine aşağıdaki gibi bir işleyici eklemeniz yeterlidir:

// Hook the JavaScript function to the onchange event of the dropdown ddlCompany.Attributes["onchange"] = String.Format("javascript:{0}", cbRef);

cbRef'in GetCallbackEventReference çağrısından döndürülen değer olduğunu hatırlayın. Yukarıda gösterilen WebForm_DoCallback çağrısını içerir.

4. Adım: Client-Side Betiğini Kaydetme

GetCallbackEventReference çağrısının, sunucu tarafı geri çağırma başarılı olduğunda ShowCompanyName adlı bir istemci tarafı betiğinin yürütüleceğini belirttiğini hatırlayın. Bu betiğin bir ClientScriptManager örneği kullanılarak sayfaya eklenmesi gerekir. (ClientScriptManager sınıfı bu modülün ilerleyen bölümlerinde ele alınacaktır.) Bunu şu şekilde yaparsınız:

System.Text.StringBuilder clientScript = new System.Text.StringBuilder(""); ClientScriptManager cm = Page.ClientScript; // Create the client script clientScript.Append("function ShowCompanyName(companyName)"); clientScript.Append("{"); clientScript.Append("document.getElementById('CoClicked').innerHTML = \"You chose \" + companyName + \".\";"); clientScript.Append("}"); cm.RegisterClientScriptBlock(this.GetType(), "showCo", clientScript.ToString(), true);

5. Adım: ICallbackEventHandler Arabiriminin Yöntemlerini Çağırma

ICallbackEventHandler, kodunuzda uygulamanız gereken iki yöntem içerir. Bunlar RaiseCallbackEvent ve GetCallbackEvent'lerdir.

RaiseCallbackEvent bir dizeyi bağımsız değişken olarak alır ve hiçbir şey döndürmez. dize bağımsız değişkeni istemci tarafı çağrısından WebForm_DoCallback geçirilir. Bu durumda, bu değer ddlCompany adlı açılan menüdeki değer özniteliğidir. Sunucu tarafı kodunuz RaiseCallbackEvent yöntemine yerleştirilmelidir. Örneğin, geri aramanız bir dış kaynağa karşı WebRequest yapıyorsa, bu kod RaiseCallbackEvent içine yerleştirilmelidir.

GetCallbackEvent , geri çağırmanın istemciye döndürülme işleminin işlenmesinden sorumludur. Bağımsız değişken almaz ve bir dize döndürür. Döndürdüğü dize, istemci tarafı işlevine (bu örnekte ShowCompanyName) bağımsız değişken olarak geçirilir.

Yukarıdaki adımları tamamladıktan sonra, ASP.NET 2.0'da bir betik geri çağırması gerçekleştirmeye hazırsınız.

A S P nokta NET 2 nokta 0'da betik geri çağırma işlemini gerçekleştirmeye yönelik video kılavuzunun ekran görüntüsü. Microsoft açılan listesi vurgulanır.

Full-Screen Video'Full-Screen aç

ASP.NET'deki betik geri çağırmaları, XMLHttp çağrıları yapmayı destekleyen tüm tarayıcılarda desteklenir. Bu, bugün kullanımda olan tüm modern tarayıcıları içerir. Internet Explorer XMLHttp ActiveX nesnesini kullanırken, diğer modern tarayıcılar (yaklaşan IE 7 dahil) iç XMLHttp nesnesi kullanır. Bir tarayıcının geri çağırmaları destekleyip desteklemediğini program aracılığıyla belirlemek için Request.Browser.SupportCallback özelliğini kullanabilirsiniz. İstekte bulunan istemci betik geri çağırmalarını destekliyorsa bu özellik true değerini döndürür.

ASP.NET 2.0'da İstemci Betiği ile Çalışma

ASP.NET 2.0'daki istemci betikleri ClientScriptManager sınıfı kullanımıyla yönetilir. ClientScriptManager sınıfı, bir tür ve ad kullanarak istemci betiklerini izler. Bu, aynı betiğin bir sayfaya birden çok kez program aracılığıyla eklenmesini önler.

Not

Bir betik bir sayfaya başarıyla kaydedildikten sonra, aynı betiği kaydetmeye yönelik sonraki girişimler, betiğin ikinci kez kaydedilmemesiyle sonuçlanır. Yinelenen betik eklenmez ve özel durum oluşmaz. Gereksiz hesaplamalardan kaçınmak için, bir betiğin zaten kayıtlı olup olmadığını belirlemek için kullanabileceğiniz yöntemler vardır; böylece bunu birden çok kez kaydetmeye çalışmazsınız.

ClientScriptManager'ın yöntemleri tüm geçerli ASP.NET geliştiricilerine tanıdık gelmelidir:

Registerclientscriptblock

Bu yöntem, işlenen sayfanın en üstüne bir betik ekler. Bu, istemcide açıkça çağrılacak işlevler eklemek için kullanışlıdır.

Bu yöntemin iki aşırı yüklenmiş sürümü vardır. Dört bağımsız değişkenden üçü ortaktır. Bunlar:

type (string)

tür bağımsız değişkeni, betik için bir tür tanımlar. Sayfanın türünü (bu) kullanmak genellikle iyi bir fikirdir. türü için GetType()).

key (string)

Anahtar bağımsız değişkeni, betik için kullanıcı tanımlı bir anahtardır. Bu, her betik için benzersiz olmalıdır. Aynı anahtara ve zaten eklenmiş bir betiğin türüne sahip bir betik eklemeye çalışırsanız, eklenmez.

script (string)

Betik bağımsız değişkeni, eklenecek gerçek betiği içeren bir dizedir. Betiği oluşturmak için bir StringBuilder kullanmanız ve ardından StringBuilder'da ToString() yöntemini kullanarak betik bağımsız değişkenini atamanız önerilir.

Yalnızca üç bağımsız değişken alan aşırı yüklenmiş RegisterClientScriptBlock kullanırsanız, betiğinize betik öğeleri (<betik> ve </script>) eklemeniz gerekir.

Dördüncü bir bağımsız değişken alan RegisterClientScriptBlock aşırı yüklemesini kullanmayı seçebilirsiniz. Dördüncü bağımsız değişken, ASP.NET sizin için betik öğeleri ekleyip eklemeyeceğini belirten bir Boole değeridir. Bu bağımsız değişken true ise, betiğinizin betik öğelerini açıkça içermemesi gerekir.

Bir betiğin zaten kaydedilip kaydedilmediğini belirlemek için IsClientScriptBlockRegistered yöntemini kullanın. Bu, önceden kaydedilmiş bir betiği yeniden kaydetme girişimini önlemenizi sağlar.

RegisterClientScriptInclude (2.0 sürümünde yeni)

RegisterClientScriptInclude etiketi, dış betik dosyasına bağlanan bir betik bloğu oluşturur. İki aşırı yüklemesi vardır. Anahtar ve URL alır. İkincisi, türü belirten üçüncü bir bağımsız değişken ekler.

Örneğin, aşağıdaki kod uygulamanın scripts klasörünün kökündeki jsfunctions.js bağlanan bir betik bloğu oluşturur:

ClientScriptManager cm = Page.ClientScript; if(!cm.IsClientScriptIncludeRegistered("jsfunc")) { cm.RegisterClientScriptInclude(this.GetType(), "jsfunc", "/scripts/jsfunctions.js"); }

Bu kod, işlenen sayfada aşağıdaki kodu oluşturur:

<script src="/scripts/jsfunctions.js" type="text/javascript"></script>

Not

Betik bloğu sayfanın en altında işlenir.

Bir betiğin zaten kaydedilip kaydedilmediğini belirlemek için IsClientScriptIncludeRegistered yöntemini kullanın. Bu, bir betiği yeniden kaydetme girişimini önlemenizi sağlar.

Registerstartupscript

RegisterStartupScript yöntemi, RegisterClientScriptBlock yöntemiyle aynı bağımsız değişkenleri alır. RegisterStartupScript ile kaydedilen bir betik, sayfa yüklendikten sonra ancak OnLoad istemci tarafı olayından önce yürütülür. 1.X'te RegisterStartupScript ile kaydedilen betikler kapanış </form> etiketinden hemen önce, RegisterClientScriptBlock ile kaydedilen betikler ise açma <formu> etiketinden hemen sonra yerleştirildi. ASP.NET 2.0'da her ikisi de kapanış </form> etiketinden hemen önce yerleştirilir.

Not

Bir işlevi RegisterStartupScript ile kaydederseniz, siz açıkça istemci tarafı kodunda çağırana kadar bu işlev yürütülmeyecektir.

Bir betiğin zaten kaydedilip kaydedilmediğini belirlemek ve bir betiği yeniden kaydetme girişiminden kaçınmak için IsStartupScriptRegistered yöntemini kullanın.

Diğer ClientScriptManager Yöntemleri

ClientScriptManager sınıfının diğer yararlı yöntemlerinden bazıları aşağıdadır.

Getcallbackeventreference Bu modülün önceki bölümlerindeki betik geri çağırmalarına bakın.
GetPostBackClientHyperlink İstemci tarafı olayından geri göndermek için kullanılabilecek bir JavaScript başvurusu (javascript:<call>) alır.
Getpostbackeventreference İstemciden bir gönderi başlatmak için kullanılabilecek bir dize alır.
GetWebResourceUrl Derlemeye eklenmiş bir kaynağın URL'sini döndürür. RegisterClientScriptResource ile birlikte kullanılmalıdır.
Registerclientscriptresource Sayfaya bir Web kaynağı kaydeder. Bunlar bir derlemeye eklenmiş ve yeni WebResource.axd işleyicisi tarafından işlenen kaynaklardır.
Registerhiddenfield Gizli form alanını sayfaya kaydeder.
RegisterOnSubmitStatement HTML formu gönderildiğinde yürütülen istemci tarafı kodunu kaydeder.