18 Mayıs 2012 Cuma

DetailsView İçindeki Verilere Erişmek

   Zaman zaman DetailsView veri kontrolümüzün içerisindeki verilere erişmek ve kullanmak isteyebiliriz. Bunu yapmak aslında oldukça basit. Bir örnek üzerinden açıklayalım : 

   Öncelikle bir DetailsViewKontrol.aspx adında bir sayfa oluşturuyorum. Sayfama bir adet DetailsView, ListBox ve Button kontrollerini ekliyorum. Yapmak istediğim şey iller tablomun bir bağlı olduğu DetailsView1 kontrolümdeki verileri ListBox içerisine atmak. Bunun için bir foreach döngüsü kuruyorum : 


 protected void Button1_Click(object sender, EventArgs e)
        {
            foreach (DetailsViewRow row in DetailsView1.Rows)
                ListBox1.Items.Add(row.Cells[1].Text);
        }

Butonuma her tıkladığımda DetailsView içerisindeki kayıt listeye ekleniyor. Burada sadece seçili sayfadaki değeri ekliyor. Eğer bütün kayıtları eklemek istiyorsanız DetailsView kontrolünün PageIndex değerini de işin içine katmanız gerekiyor. 

Burada dikkat etmek gereken başka bir husus daha var. Eğer DetailsView içerisindeki bir field, template ise bu durumda yukarıdaki yöntem işe yaramayacaktır. Bu durumda ilgili kontrole erişmeniz gerekir. Örneğin il adımız bir LabelIl adında bir Label kontrolüne bağlı olsun. Bu durumda şöyle bir ifadeyle kontrolümüze erişmek mümkün : 

Label LabelIl = (Label)DetailsView1.FindControl("LabelIl");
ListBox1.Items.Add(LabelIl.Text);


13 Mayıs 2012 Pazar

Server response error : 'A potentially dangerous Request.Form value was detected from the client'

   TextBox kontrollerinin içerisinde güvenlik gerekçesiyle olsa gerek html kodları eklenmesi hataya neden olabiliyor. Ben bu hatayı kullandığım formda asyncFileUpload kontrollüyle resim yüklerken aldım. Formda aynı zamanda bir textboxa ilişkilendirilmiş htmlTextEditor de kullanmıştım. asyncFileUpload olmadan güncelleme veya ekleme işlemlerinde sorun olmuyordu. Muhtemelen htmlTextEditor html kodlarını dönüştürüyordu. Fakat asynFileUpload ile dosya yüklerken başlıktaki hata mesajı ile karşılaştım. 

   İnternette yaptığım ufak bir araştırmanın ardından çözüm yolunu buldum. web.config dosyanıza validateRequest="false" ve <httpRuntime requestValidationMode="2.0" /> kodlarını ekleyin. Bu kodları system.web alanı içerisine eklemeniz gerekiyor. Sayfanızın başına ValidateRequest="false" ifadesini eklerek de sayfanızdaki kontrol denetimini devre dışı bırakabilirsiniz. TextBox içerisine yazılan scriptler bu ifadeyi false yaparsanız çalıştırılacaktır. Örneğin sayfanızdaki herhangi bir textBox içerisine <script>alert("hello!")</script> ifadesini yazıp bir butona basıncı bu ifadeyi bir label text özelliğine aktarmaya kalkarsanız script çalışır. Yukarıdaki ifadeleri eklememiş olsaydınız konunun başlığındaki hata ifadesi ile karşılaşacaktınız.

   Güvenlik açısından eğer sayfanızda kontrol denetimlerini devre dışı bırakmışsanız Server.HtmlEncode(TextBox1.Text) şeklinde işlemlerinizi yaparsanız kutunuzun içerisindeki script ifadeleri normal bir stringe dönüştürülecektir. Böylece de script ataklarını önlemiş olursunuz.

Asp.net Yazi - Metin Taşma Sorunu

   Bazen bir label veya benzeri bir kontroldeki yazılarımızın içeriği uzun olabilir. Bu yazı uzunluklar uygun paragraflarla ayrıştırılmışlarsa bir sorunla karşılaşmayabiliriz. Peki bir alt satıra geçilmemişse ne olacak? Bu durumda ister istemez yazımızın taşması gibi bir sorunla karşılaşırız. Aklımıza gelen ilk çözüm yolu sanırım kontrolümüzün genişlik değerini ayarlayarak bu sorunu çözebileceğimiz şeklindedir. Fakat malesef ki çözemiyoruz. Örneğin Label kontrolümün width değerini 100px yaptım. Bu durumda yazımda eğer alt satıra geçilmemişse ve uzunsa bir taşma olacaktır. Bu sorunun belki de pek çok çözüm yolu olabilir. Bunlardan birisi de CSS3 ile birlikte gelen word-wrap:break-word; özelliğidir. Eğer kontrolünüzün css değerine bunu eklerseniz sorununuz muhtemelen çözülecektir.

11 Mayıs 2012 Cuma

OldValuesParameterFormatString

   Bazı durumlarda güncelleme yaparken silinecek kaydın anahtar değerini de güncellemek isteyebiliriz. Böyle durumlarda ortaya bir sorun çıkıyor. Eski kayıtla yeni kayıt arasındaki farkı nasıl anlayacağız? Bu sorunu çözmenin yolu SqlDataSource kontrolünün OldValuesParameterFormatString özelliliğinde saklı. Bu özellik bize eski değerimizin nasıl bir formatta olacağını soruyor. Varsayılan değeri {0} olarak gözükmektedir. Bu değeri genellikle original_{0} olarak belirliyoruz. Yani benim orjinal değerim bu formattaki parametrede saklanacak diyoruz. Gridview veya detailsview gibi bir kontrolde örneğin müşteri adı gibi bir değeri bind etmişsek ve bu değer de tablomuzun anahtar alanı ise update komutunu yazarken 2 parametre kullanmamız gerekiyor. Birisi musteriAd öteki de original_musteriAd olmak üzere. musteriAd yeni değerimiz original_musteriAd eski değerimiz olacak. Anahtar alan dışındaki değerleri update yaparken böyle bir sorunla karşılaşmıyoruz. Çünkü original_{0} parametremizi genellikle bu gibi durumlarda where ifadesinde filtreleme yaparken kullanıyoruz. Örneğin UPDATE tblMusteri SET musteriAd = @musteriAd WHERE musteriAd = @original_musteriAd komutunda olduğu gibi.

9 Mayıs 2012 Çarşamba

ModalPopup Extender

   ModalPopupExtender kullanıcıların sayfanın kalanından bağımsız olarak şekilsel bir tarzda belirli bir bölümünün görüntülenmesini sağlar. Şekilsel içerik herhangi bir hiyerarşik kontroller olabilir ve özgün bir sitil uygulanmış bir arkaplanın üzerinde görüntülenir. 

   Görüntülendiğinde, sadece modal içerik üzerinde işlemler yapılabilir, safanın geri kalan kısmında tıklama yapılamaz. Kullanıcı modal içerikle etkileşimde bulunduğunda, tıklanan bir Tamam/İptal kontrolü sonucu özel betik çalıştırılır. Özel betik modal mode aktif olduğu zaman uygulanacaktır. Eğer bir postback gerekiyorsa basitçe tamam/iptal butonuna izin verilir ve sayfa yeniden çalıştırılır. Modal popup sayfa konumunu X ve Y özelliklerini değiştirerek ayarlayabilirsiniz. Varsayılan olarak sayfanın merkezinde görüntülenir. X ve Y değerlerine göre yatay ve dikey hareket eder. Modal içerik görüntülenirken veya gizlenirken OnShowing/OnShown/OnHiding/OnHidden animasyonlarını kullanabilirsiniz. 

Örnek kod:

<ajaxToolkit:ModalPopupExtender ID="MPE" runat="server"
    TargetControlID="LinkButton1"
    PopupControlID="Panel1"
    BackgroundCssClass="modalBackground" 
    DropShadow="true" 
    OkControlID="OkButton" 
    OnOkScript="onOk()"
    CancelControlID="CancelButton" 
    PopupDragHandleControlID="Panel3" >
        <Animations>
            <OnShowing> ..  </OnShowing>
            <OnShown>   ..  </OnShown>    
            <OnHiding>  ..  </OnHiding>            
            <OnHidden>  ..  </OnHidden>            
        </Animations>
    </ajaxToolkit:ModalPopupExtender>
italik olarak yazılı olanlar opsiyoneldir.

Özellikleri :


  • TargetControlID - Modal içeriği aktif hale getiren kontrolün ID değeri.
  • PopupControlID - Modal popup görüntüleyen kontrolün ID değeri. Genellikle Panel kontrolü kullanılır.
  • BackgroundCssClass - Modal popup görüntülendiğinde arkaplana uygulanacak css class.
  • DropShadow - True olması halinde Modal popup arkasında gölge efekti uygulanır.
  • OkControID - Modal  popup bırakan kontrolün ID değeri.
  • OnOkScript - Modal popup OKControlID ile birlikte bırakıldığında çalıştırılacak olan script değeridir.
  • CancelControlID - Modal popup'dan çıkmak için kullanılan kontrolün ID değeri.
  • OnCancelScript - Modal popupCancelControlId ile birlikte bırakıldığında çalıştırılan script.
  • PopupDragHandleControlID - Modal popup içeriğini sürüklemek için kullanılan kontrolün ID değeri.
  • X - Modal popup'ı x sol üst köşesinden x koordinat hareket ettirir.
  • Y - Modal popup'ı sol üst köşesinden y koordinat kaydırır.
  • RepositionMode - Modal popup pencerede nerede gösterileceğini belirtir.

8 Mayıs 2012 Salı

Grafik Kullanıcı Arayüzlerinin Tarihi Gelişimi

1973


1980


1981


1983




1984




1985





1986


1987




1988




1990




1992




1993


1994




1996




1997


1998




1999




2000



2001


2003


2004


2007


1 Mayıs 2012 Salı

DetailsViewMode Nasıl Değiştirilebilir

   DetailsView kontrollerinin bilindiği gibi 3 farklı modu vardır : Insert, Edit, ReadOnly. Bu modları programatik olarak değiştirebileceğimiz bir metodu var. Örneğin, DetailsView1.ChangeMode(DetailsViewMode.Insert) diyerek ekleme moduna, DetailsView1.ChangeMode(DetailsViewMode.Edit) diyerek düzenleme moduna, DetailsView1.ChangeMode(DetailsViewMode.ReadOnly) diyerek de görüntüleme moduna geçebiliriz. DetailsView kontrolünün varsayılan modu ReadOnly yani görüntüleme modudur.

TemplateField InsertVisible

   DetailsView veya GridView gibi kontrollerde rastladığımız TemplateField InsertVisible özelliği bool olarak True/False olmak üzere 2 değer alabiliyor. Varsayılan değeri True. Kontrolümüz Insert modundayken gözüküp gözükmeyeceğini belirlememizi sağlıyor.