Merhaba Arkadaslar

            Bugunku makalemizde postback kavramını inceleyecegiz . İnternet sayfamız sunucudan her talep edildiginde sayfamızın yasam dongusu geregi sayfa ölür ( dispose ) ve yeniden olusur (bir onceki trace mekanizması adlı makalemizde bu konuya deginmiştik .  ) . Sayfamız ilk yuklendikden sonra sunucuya dolu bilgi ile gidip geliyor ise buna postback denir . Sayfamız bu olusum içerisinde içindeki verileri kaybetmemek icin viewstate adını verdigimiz olay ile verilerini saklar .  Bu veriler sayfa sunucuya gitmeden hemen once view state e aktarılır . View state konusunu ayrı bir konu olarak gorucez .  Makalemiz içerisindeki uygulamamız 2 farklı dropdownlist imiz olsun   marka  model  adında sectigimiz markanın modellerini bir alttaki dropdown içerisinde gorelim ...

 İlk once tsql komutlarımızı ayarlayalım ...

create database PostBackKavrami

use PostBackKavrami

 

create table tblmarka

(

Markaid int identity(1,1) primary key,

Markatanim nvarchar(50)

)

 

insert into tblmarka values ('Renault')

insert into tblmarka values ('Honda')

insert into tblmarka values ('Ford')

 

create table tbl_model

(

Modelid int identity(1,1),

Markaid int,

ModelTanim nvarchar(90),

constraint FK_Modeltomarka foreign key (Markaid) references tblmarka(Markaid) on delete cascade

)

 

insert into tbl_model values (1,'Clio')

insert into tbl_model values (1,'Megane')

insert into tbl_model values (1,'Laguna')

 

insert into tbl_model values (2,'Civic')

insert into tbl_model values (2,'Accord')

insert into tbl_model values (2,'City')

 

insert into tbl_model values (3,'Kia')

insert into tbl_model values (3,'Mondeo')

Default.aspx sayfamızın tasarımına bakalım ...

 

Amacımız marka dropdownlist imizde markalarımızı gormek ve marka dropdown undan bir marka sectigimizi zaman ise altında o marka ya ait modelleri gormek olucakdır ...

Dbml imizi ayarlayalım

 

Datayonetim adını verdigimiz class ımızı acalım ve markalarımız alıcak olan metotumuzu yazalım ...

using System;

using System.Data;

using System.Configuration;

using System.Linq;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.HtmlControls;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Xml.Linq;

 

public class DataYonetim

{

   

    mydatabaseDataContext database;

      public DataYonetim()

      {    

        database = new mydatabaseDataContext();

      }

 

    public ListItem[] Markalarim()

    {

        // Markalarımızı alalım ...

        return (from I in database.tblmarkas

                select new ListItem()

                    {

                        Text = I.Markatanim,

                        Value = I.Markaid.ToString()

                    }).ToArray();

    }

 

    public ListItem[] ModellerimiAl(int _markaid)

    {

        // Modellerimizi alalım _markaid degerine gore denk gelen modelleri ...

        return (from I in database.tbl_models

                where I.Markaid == _markaid

                select new ListItem()

                {

                    Text = I.ModelTanim,

                    Value = I.Modelid.ToString()

                }).ToArray();

    }

 

}

Simdi Default.aspx sayfamızın cs kısmına gecelim ve kodlarımız yazalım ...  

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

{

    DataYonetim Yonetim;

    protected void Page_Load(object sender, EventArgs e)

    {

        // Marka adını verdigimiz dropdownlist imizin autopostback özelligini true olarak ayarlayalım ...

        drp_marka.AutoPostBack = true;

        Yonetim = new DataYonetim();

        MarkalarimiAl();

    }

 

    public void MarkalarimiAl()

    {

        drp_marka.Items.AddRange(Yonetim.Markalarim());

        drp_marka.DataBind();

    }

}

Uygulamamızı calıstıralım ve postback kavramına bakalım ...

 

 

Sayfamız ilk yuklendigi zaman Page_Load olayında markalarimi al metotumuz calıstı ve dropdownlist imizi içerisindeki addrange metot u ile markalarımız doldu . daha sonra biz ilgili dropdowndan bir marka sectik ( drp_marka.AutoPostBack = true; ) sayfamız postback oldu . Peki bu aşamada neler oldu ...

-- sayfa icindeki verileri viewstate a attı ve sayfa IIS e yeniden gitti derlendi yasam dongusundeki tum metotları yeniden calıstı ve bana post ile geri geldi icindeki veriler yani view state icindeki veriler dropdown un icine yeniden doldu ve page_load olayında yeniden markaları aldı ve aynı datalar yine geldi .

Biz bunun onune gecmek icin ...

DataYonetim Yonetim;

    protected void Page_Load(object sender, EventArgs e)

    {

        // Marka adını verdigimiz dropdownlist imizin autopostback özelligini true olarak ayarlayalım ...

        drp_marka.AutoPostBack = true;

        Yonetim = new DataYonetim();

        if (!IsPostBack)

        {

        // postback degil ise yani sayfa ilk defa gelmiş ise ( get )

        MarkalarimiAl();

        }

    }

IspostBack property sini kullanırız bu deger bize true veya false olarak gelir ve bende Page_Load olayında Ispostback degil ise yani sayfa ilk defa yuklendi ise bu işlemi yap derim ... sayfa postback oldugunda if kosulum icinde kontrol edilir ve markalarimAl metot um postback olayında calısmaz ...

Default.aspx.cs
-------------------

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

{

    DataYonetim Yonetim;

    protected void Page_Load(object sender, EventArgs e)

    {

        // Marka adını verdigimiz dropdownlist imizin autopostback özelligini true olarak ayarlayalım ...

        drp_marka.AutoPostBack = true;

        Yonetim = new DataYonetim();

        if (!IsPostBack)

        {

        // postback degil ise yani sayfa ilk defa gelmiş ise ( get )

        MarkalarimiAl();

        }

    }

 

    public void MarkalarimiAl()

    {

        drp_marka.Items.AddRange(Yonetim.Markalarim());

        drp_marka.DataBind();

    }

    protected void drp_marka_SelectedIndexChanged(object sender, EventArgs e)

    {

        drp_model.Items.Clear();

        drp_model.Items.AddRange(Yonetim.ModellerimiAl(int.Parse(drp_marka.SelectedItem.Value)));

        drp_model.DataBind();

    }

}

Uygulamamızı Calıstırdıgımız zaman seçmiş oldugumuz markaya ait modellerin geldiginide gorucegiz ...

.Net Ile Kalın .

postBackKavrami.rar (6,73 kb)