Makale Özeti

Web uygulamalarının windows uygulamalarından en temel farklarından biri windows uygulamaları kadar isteklere hızlı cevap verememesidir, bununda sebebi web uygulamalarının Server taraflı çalışmalarıdır. Bu makale Atlas ile daha efektif web uygulamarı oluşturmayı anlatmaktadır

Makale

Web uygulamalarının windows uygulamalarından en temel farklarından biri windows uygulamaları kadar isteklere hızlı cevap verememesidir, bununda sebebi  web uygulamalarının Server  taraflı çalışmalarıdır.

Web uygulamalarının daha efektif çalışabilmesi için Ajax isimdeki sistem geliştirildi ve bu oldukça ilgi gören bir teknoloji haline geldi. Asp.net  1.1 ile Ajax kullanılıyordu fakat biraz zahmetliydi. Bunun sebebi ise Ajax referansının kullanılmasının haricinde javascript programlaması da eklenmesi gerekiyordu. Microsoft Ajax’a olan ilgi karşısında Asp.net 2.0 ile Ajax’ın en sorunsuz ve efektif çalışabilmesi için ATLAS sistemi geliştirdi.

Bu makaleden okumadan önce Atlas’ın mantığının çok güzel anlatıldığı Asp.net Atlas’a Genel Bakış makalesini okumanızı tavsiye ederim.

Atlas ile çalışabilmek için temel şart mevcut olan Atlas Community Technology Preview kurulmasıdır ve tabii ki Asp.Net 2.0 ile çalışılmalıdır.

Atlas ile çalışırken dikkat edilmesi gereken ilk nokta yeni bir Web Project oluştururken Templates bölümünden “Atlas Web Site” seçilmelidir. Bu template,  Microsoft.Web.Atlas.dll’in referanslara eklenip gelmesini, gerekli schema referanslarının eklemesini ve web.config’de gerekli eklemeleri yapmasını sağlıyor.

Atlas ile çalışabilmek için html kodlarımız içersine <atlas:ScriptManager> kontrolünü kullanmak gerekiyor. Bu kontrol sayesinde Atlas’ın güzel yüzünü görebiliyoruz.

<atlas:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="True" />

Bu kontroldeki EnablePartialRendering attribute değeri True olduğu takdirde sayfalarımız postback olmayacaklar.Bu control sayesinde sayfamızdaki controller işlem yaparken, sayfanın tamamı sunucuya gönderilmiyor , sadece gönderilmesini istediklerimiz sunucuya gönderiliyor. Sunucuya gönderilip mevcut içeriklerininin değişmesini istediğimiz controlleri ise <atlas:UpdatePanel> controlü içerisinde belirtiyoruz.

<atlas:UpdatePanel ID="Panel" runat="server">

    <ContentTemplate>

     ……

    </ContentTemplate>

    <Triggers>

      <atlas:ControlEventTrigger ControlID="ControlId" EventName="EventAdi" />

  <atlas:ControlValueTrigger ControlID=" ControlId " PropertyName=" ControlProperty" />

    </Triggers>

    </atlas:UpdatePanel>

Yukarıda standart bir update panel kodları bulunmaktadır. Update Panel iki kısımdan oluşmaktadır. Bunlar ContentTemplate ve Triggers. ContentTemplate, sayfa postback olmadan içindeki control veya controllerin değerinin  güncellenmesi sağlıyor. Bir başka değişle, ScriptManager içerisinde belirtilen EnablePartialRendering attribute’u parçalı olarak ContentTemplate içerindeki control değerlerini güncelliyor. Buna en iyi örnek olarak şüphesiz GridView verilebilir. Edit, Cancel, Delete gibi komutlarda sayfanın postback olmadan işlem yapabilmesi için kullanılabilir. İkinci kısım ise Triggers yani ContentTemplate’in ne zaman güncelleneceğini belirleyen tetikleyiciler. Bu tetikleyicilerde iki tipde bulunmaktadır. Bunlar Event’e göre veya Value’a göre işlem yapmayı sağlarlar. Örneğin :

<atlas:ControlEventTrigger ControlID="Button1" EventName="Click" />

Bu trigger Button1 controlünün Click olayı gerçekleşince ContentTemplate içerisindeki control değerlerini güncelleyecektir. Basit bir örnek yapacak olursak öğrenci bilgilerini tutan bir table’dan verileri GridView controlüne dolduralım ve refresh olmadan mevcut verileri güncelleyelim :

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE TABLE [dbo].[Ogrenciler](

      [OgrenciId] [int] IDENTITY(1,1) NOT NULL,

      [Adi] [nvarchar](50) COLLATE Turkish_CI_AS NOT NULL,

      [Soyadi] [nvarchar](50) COLLATE Turkish_CI_AS NOT NULL,

      [Telefon] [nvarchar](50) COLLATE Turkish_CI_AS NOT NULL,

      [Email] [nvarchar](50) COLLATE Turkish_CI_AS NOT NULL,

      [Cinsiyet] [bit] NOT NULL,

 CONSTRAINT [PK_Ogrenciler] PRIMARY KEY CLUSTERED

(

      [OgrenciId] ASC

)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

Table oluşturduktan sonra web sayfamızı hazırlayalım. Atlas ile çalışmak için ilk kural <atlas:ScriptManager> kontrolünü kullanmak :

<atlas:ScriptManager Id="MyScriptManager" runat="server" EnablePartialRendering="true"> </atlas:ScriptManager>

Hemen ardından <atlas:UpdatePanel> içerisinde ContentTemplate ve Triggers belirliyoruz. Trigger da sayfamızdaki button’un Click olayı tetiklendiğinde ContentTemplate içeriğinin güncellenmesini istediğinimiz belirtiyoruz  :

<atlas:UpdatePanel ID="UpdatePanel1" runat="server">

    <ContentTemplate>

        <asp:GridView ID="GridView1" runat="server">

        </asp:GridView>

    </ContentTemplate>

    <Triggers>

    <atlas:ControlEventTrigger ControlID="BtnGuncelle" EventName="Click" />

    </Triggers>

    </atlas:UpdatePanel>

Güncelleme işlemini yapacak olan button’u da ekliyoruz :

  <asp:Button ID="BtnGuncelle" runat="server" Text="VerileriGüncelle" />

Artık code tarafında geçip mevcut kodlarımızı yazabiliriz.

SqlConnection con = new SqlConnection(@"server=.\SqlServer2005;database=OgrenciSistemi;Integrated Security = SSPI");

protected void Page_Load(object sender, EventArgs e)

{

        OgrenciListele();        

}

void OgrenciListele()

{

        SqlDataAdapter da = new SqlDataAdapter("Select * From Ogrenciler", con);

        DataSet ds = new DataSet();

        da.Fill(ds);

        GridView1.DataSource = ds.Tables[0];

        GridView1.DataBind();

}

protected void BtnGuncelle_Click(object sender, EventArgs e)

{

        OgrenciListele();

}

Artık uygulamayı test edebilirsiniz. Güncelle button’una tıklandığı zaman sayfanın postback olmadığını , ama değişen, eklenen kayıt var ise ekrana geldiğini göreceksiniz.

Eğer web uygulamasını kullanan client’ın bağlatısı yavaş işe, verileri güncelle button’una tıkladıktan sonra veri güncelleme işlemi bitene kadar kullanıcıya verilerin güncelleme işleminin devam ettiğini bildirmemiz gerekir. Bu bildirim ise <atlas:UpdateProgress> ile yapılmakdatır. Bu kontrol ContentTemplate güncellemesi bitene kadar ekranda görünecektir. İçeriği bir bölümden oluşur ve o da <ProgressTemplate> kısmıdır. Bu bölümde update sırasında ekrana kullanıcı ne görecekse o belirtilmelidir.

<atlas:UpdateProgress ID="UpdatePrg" runat="server">

     <ProgressTemplate>

     </ProgressTemplate>

</atlas:UpdateProgress>

Mevcut projemize <atlas:UpdateProgress> ekledikten sonra tam olarak ilk Atlas uygulamamızı bitirmiş oluyoruz.

  <atlas:UpdateProgress ID="UpdatePrg" runat="server">

     <ProgressTemplate>

         <img src="indicator.gif" /> Veriler Güncelleniyor...

     </ProgressTemplate>

  </atlas:UpdateProgress>

UpdateProgress çalışmasını görebilmek için button’a basıldığında işlemi 2 saniye bekletiyorum.

protected void BtnGuncelle_Click(object sender, EventArgs e)

    {

        System.Threading.Thread.Sleep(2000);

        OgrenciListele();

    }

Uygulamamızın ekran çıktısı ile aşağıdaki gibi olmaktadır.

Bir başka Atlas makalesinde görüşmek üzere

Okan Tekeli

okan.tekeli@bilgeadam.com

okan@okantekeli.com