Pages

iPucu! Linkler arası farklar.

standart Link : Eğer sunucu tarafında hiç bir kod çalıştırlmayacaksa bu kontrol tercih edilmelidir. Sunucu kaynaklarını daha az kullanır.
<a href="Default2.aspx">Default2</a>
HyperLink: Eğer sunucu tarafında bazı kodlar çalıştırılacaksa bu kontrol tercih edilmelidir. Sayfanın içeriği sunucuya gönderilmez.
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/Default2.aspx"> Default2 </asp:HyperLink>
LinkButton: Eğer sunucu tarafına sayfanın içeriği de gönderilecekse bu kontrol tercih edilmelidir. Sunucuyu en çok meşgul eden kontroldür.
<asp:LinkButton ID="LinkButton1" runat="server" PostBackUrl="~/Default2.aspx">Default2 </asp:LinkButton>

İpucu!Server.Transfer/execute

Server.Transfer metodu yüksek performans gerektiği anlarda, sunucuya herhangi bir postback olması durumunda ve hata sayfaları gibi yerimlerine kaydedilmeyecek sayfalarda kullanılmalıdır. Ayrıca bu metotta hata yönetimi Redirect metoduna göre daha kolaydır.
Server.Execute metodu ise bir önceki sayfanın kontrollerinin yeni sayfa da görülmesi gerektiği anlarda kullanılmalıdır.

İpucu! DataList’e ArrayList bağlamak.

Bir DataList’e, sadece DataTable ile veri bağlamak zorunda değiliz. ICollection arayüzünü uygulayan herhangi bir nesneyi de DataList’e veri kaynağı olarak bağlayabiliriz.

namespace DataListControl
{
public class Dokuman (string Adi, string Icerik, string Kategorisi)
{string Adi;string Yazari;  string Bolumu; 
Adi = Adi;
icerik= Icerik;
Bolumu= Kategorisi;
}
}############### arraylist oluşturup data liste eklediğimiz satırlar aşağıda######

ArrayList aListKitaplar = new ArrayList();

aListKitaplar.Add( new Kitap(" İbo ", "Asp.net ", "Dandun  " ) );
aListKitaplar.Add( new Kitap( " Gereksiz", "Gerekli  ", "Dandun ") );
DataList1.DataSource = aListKitaplar;

iPucu! ViewState nedir?

View State, bir ASP.NET sayfası içerisinde bulunan kontrollerin özelliklerinin ve programcının istediği verilerin saklanmasını sağlayan yapıdır.. Varsayılan olarak biz belirtmesek bile, sayfada Postback işlemi gerçekleştiğinde kontrollere ait bilgiler sunucu tarafında HTML kodları üretilirken şifrelenmiş bir şekilde View State içerisine yazılır. Sayfa tekrar yüklendiğinde ise kontrollerin özellikleri bu nesneden okunur. Böylece Postback işlemi sonucunda kontroller üzerinde yapılan değişiklikler sayfa tekrar yüklendiğinde kaybedilmeden elde edilebilir.

Asp.net Cache işlemleri( Output Caching)

Web uygulamalarında performans önemlidir. Performansı artırmanın yollarından biride caching dir.Caching yani sayfayı önbellekte tutma işi belirli süre içinde kullanıcı sayfayı tekrar çağırmışsa html’in önbellekten yüklenmesidir.

<%@OutputCache Duration="300" Location="Any" VaryByParam="none" %>
burda Duration çnbellekte saklama süresini location ise sayfanın  nerede önbellekleneceğini verir.

Location nesnesinin alabileceği değerler şunlardır
Any :Önbellekleme, isteği yapan Client, Proxy Server yada isteğin yapıldığı server üzerinde olur.
Client:Önbellekleme, isteği yapan Client’ de olur.
DownStream:Önbellekleme, isteği yapan Client’de ve Proxy Server üzerinde olur.
None:Önbellekleme yapılmaz.
Server:Önbellekleme, isteğin yapıldığı Server üzerinde olur.
ServerAndClient:Önbellekleme, isteği yapan Client’de ya da isteğin yapıldığı Server üzerinde olur.

şimdi kodumuzu yazalım ve görelim 20 sn içinde gelen verilerin cache den olduğunu.

protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write(DateTime.Now.ToString());
        }

Şimdi VarybayParam özelliği ise QueryString’den gelen değerlere göre önbellekleme işlemi yapar.Aşağıdaki kodumuza bakalım.

default.aspx e bu kodu

Response.Redirect("Default2.aspx?ad="+TextBox1.Text+"&soyad="+TextBox2.Text);

bu kodları default2.aspx dosyasına yazarsak göreceğiz ki

protected void Page_Load(object sender, EventArgs e)
        {
            string ad = Request.QueryString["ad"].ToString();
            string soyad = Request.QueryString["soyad"].ToString();

            Response.Write(ad+""+soyad);
        }

<%@ OutputCache Duration="40" Location="Any" VaryByParam="ad" %>

ad alanı değiştirsekte soyad alanına yazacağımız yazılar 40 saniye boyunca değişmeyecek.

Şimdi Fragment Caching yani sayfanın belli bir ksımının ön belleklenmesine bakalım.

hemen Ascx uzantılı yeni sayfamızı oluşturalım.(user control) ve şu kodu yazalım

<%@ OutputCache Duration="10" VaryByParam="none" %>


protected void Page_Load(object sender, EventArgs e)
        {
            Label1.Text = DateTime.Now.ToString();
        }

göreceğiz ki sayfada diğer kontroller refresh ile değişirken bu label in text i sadece 10 saniyede bir değişecek.

Dikkat :UserControl nerelerde kullanılmışsa kullanıldığı her yer için ayrı ayrı çıktısı bellekte saklanır. Shared özelliğini True yaparak, tüm sayfalar için tek bir çıktı bellekte saklanır.

<%@ OutputCache Duration="10"Location="Any" VaryByParam="none"Shared="true”%>

şimdi sayfamızda herhangi bir kotrolün değişimine göre cachleme yapalım. Örneğin dropdownlist ekleyelim ve bunun seçili olan index ine göre önbellekleme yapalım.Önce bu kodu sayfamıza ekleyelim.

<%@ OutputCache Duration="40" Location="Any" VaryByControl="DropDownList1"  Shared="true"%>

Dikkat: Burda DropdownList i mizde AutoPostBack özelliği true yapılmalı ki sayfa yenilendiğinde default öğe seçili olarak gelmesin.

Hemen arkasından sayfayı çalıştırdığımızda ve dropdownlistte bir şeyi seçince sayfanın yeniden cache len diğini görüyoruz. eğer seçili öğeyi değiştirmeden refresh yaparsak 40 sn boyunca aynı veri sayfada görüntülenir. fakat değiştirdiğimiz anda o anki veri görüntülenir ve cache o alınır.

Substitution Caching:
Şimdi Cachleme olayını yaparken tam ters işlemleri yapalım. Mesela sayfa tümüyle cachelenirken sadece bşr bölümü sürekli yenilensin. işte bu işleme Substitution Caching denir.

önce bu kodları oluşturalım. sonra çalıştırdığımızda sayfa refresh edilince sadece tarih alanlarının birini her refreshte değiştiğini görelim diğeri ise sayfanın cache de kalma süresi bittiğinde değişir.
<%@ OutputCache Duration="10" Location="Any" VaryByParam="none" %>

protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write(DateTime.Now.ToString());
        }
        public static string DanDun(HttpContext daaan)
        { 
          return DateTime.Now.ToString();
        }

burda dikkat etmemiz gereken kısım: HttpContext sınıfı türünde veri alan ve geriye string döndüren fonksiyon olmalıdır.Çünkü Önbellekleme yapılmış bir sayfa içinde dinamik alan oluşturabilmek için HTML içinde Substitution kontrolünü yada HttpResponse sınıfının WriteSubSubstitution metodunu kullkullanıcaz.

<asp:Substitution ID="Substitution1" runat="server" MethodName="DanDun"/>
yada
<%Response.WriteSubstitution(new HttpResponseSubstitutionCallback(DanDun)); %>