Ana Sayfa | English Blog | Seminer TV | Dil Cookie Sil  Blog'u Mail ile takip et!       
Daron Yöndem - ASP.NET 4.0
bir yazılımcının tasarıları...
 Tuesday, April 06, 2010

Bugün Akdeniz Üniversitesi İnternet Haftası'ndaydım. Geçen sene Silverlight ve WPF ile kullanıcı deneyimine değinmiştik. Bu sene de yine aynı etkinlikte WPF4, .NET Framework 4 ve Visual Studio 2010 ile sahnedeydim. Benden önce de sevgili Ahmet Uygur hızlıca bir Office 2010 upgradi yaptı hepmize ;) Her zamanki gibi çok eğlenceli bir gündü özellikle İstanbul'dan bir gün de olsa Antalya'ya gidince insanın havası değişiyor öyle geri döndüğünüzde bir saçmalama dönemi geçirip kendinizi tatilde sanabiliyorsunuz :)

Akdeniz Üniversitesi Seminerim
Akdeniz Üniversitesi Seminerim

Etkinlikte emeği geçen tüm öğrenci kardeşlerime ve tabi ki bizleri gün boyunca yalnız bırakmayan tüm hocalarımıza defalarca teşekkürler. Umarım faydalı olmuştur ;) Önümüzdeki sene için şimdiden çok farklı planlarımız ben Akdeniz Üniversitesi için, benden söylemesi :)

Tuesday, April 06, 2010 7:07:00 PM (GTB Standard Time, UTC+02:00)  #    Comments [1]   .NET Framework 4.0 | ASP.NET 4.0 | Silverlight 4 | Visual Studio 2010 | WPF  | 
 Sunday, December 27, 2009

Koca bir INETA NEXT serisi bitti! :) Bu hafta sonu gerçekleştirdiğimiz Denizli etkinliği ile beraber 2009'ın NEXT serisine son vermiş olduk. Diyarbakır, İstanbul, Kayseri ve Denizli turumuz INETA kapsamında tüm sosyal topluluklar ve editörleri ile beraber son iki yılda gerçekleştirdiğimiz en büyük hareket oldu. Tüm bu seri boyunca katkıda bulunan INETA sosyal topluluklarımıza ve sevgili konuşmacılarımıza ÇOK teşekkürler.

Muammer Benzeş (birliktegelistir.com)
Erkan Balaban (Ceviz.net)
Oğuz Yağmur (csharpnedir.com)
Uğur Umutluoğlu (nedirtv.com)
Barış Kanlıca (yazgelistir.com)
Burak Selim Şenyurt (nedirtv.com)
Selçuk Yavuz (Ceviz.net)

Tüm etkinlikler boyunca en çok merak edilenlerden birinin "Beyin" olduğunu gördüm :) Biliyorsunuz ilk etkinliği duyurduğumuzda her şehirde bir katılımcıya yeni bir beyin vereceğimizden bahsetmiştik. Bu beyin konusunda ben her ne kadar samimi olsam da :) herkes "beyin" kelimesinden yola çıkarak çok farklı şeyler düşünmüş. Oysa gerçekten de "beyin" derken "beyin" demek istemiştim :)

Yepyeni bir beynin sahibi!
Yepyeni bir beynin sahibi!

Fotoğrafta da görebileceğiniz üzere arkadaşımız yeni beynini sevinçle karşılamış durumda :D Her şehirde bu şekilde bir beyin hediye etme şansımız oldu. Beynin özelliği gerçek bir beyin "vıcıklığında" olma ile beraber her ne yaparsanız yapın esnese de şeklini kaybetmiyor olması :)

Etkinliklerimize katılan herkese tekrar defalarca çok teşekkürler. Bizi takip etmeye devam edin ;)

Sunday, December 27, 2009 10:23:48 AM (GTB Standard Time, UTC+02:00)  #    Comments [1]   .NET Framework 4.0 | ASP.NET 4.0 | C# | Expression Blend | Expression Studio | IE 8.0 | IIS 7.0 | LINQ | PLINQ | Silverlight 4 | Visual Basic 2010 | Visual Studio 2010 | WCF | Windows 7 | WPF  | 
 Monday, December 21, 2009

Bugün INETA NEXT serimizin Kayseri ayağını tamamladık. Ceviz.NET'ten sevgili Selçuk Yavuz ile beraber konuşmacı olduğumuz etkinlik boyunca Silverlight, WPF, C#4, VB10, Visual Studio 2010, MVC2, ASP.NET 4 gibi konulara değindik.

INETA NEXT Kayseri
INETA NEXT Kayseri

Özellikle Kayseri etkinliği çevre illerin de katılımın da bölgesel bir etkinliğe dönüşmüştü. Yirmi kişilik ekiplerin başka şehirlerden gelebiliyor olması doğru bir konum seçtiğimiz adına güzel bir mesajdı diyebilirim. Tabi her zamanki gibi etkinlik saatleri sarktı bizim gidiş uçağımız gecikti vs derken özellikle şehir dışından gelen ekipler son oturumları otobüs saatleri nedeniyle kaçırdılar :( Yine de değerlendirme formlarına baktığımda herkesin mutlu olduğunu görmek çok sevindirici.

Kayseri'den bir kare...
Kayseri'den bir kare...

Kayseri aynı anda benim de baba memleketi olduğu için ayrı bir sempati duyduğumu itiraf etmeliyim. Diğer yandan pastırma, çemen ve mantı üçlüsü da efsanevi hareketlere yol açabiliyor :) Ama şunu tekrar öğrendim İstanbul'da mantı da yalan pastırma da! Geleceği dair hedeflerimi net bir şekilde belirledim artık. Bir helikopter satın alıp herşeyi memleketinde yemek gerek :)

Etkinlikte katkılarından dolayı iki süper MSP'ye çok teşekkür ediyorum! Sevgili İbrahim Kıvanç ve Mustafa Kaya! Çok teşekkürler tüm desteğiniz için. Ayrıca İbrahim bir de C# 4.0 dinamik diller desteği konusunda mini IronPython oturumu sundu ;) Süperdi!

Son olarak Erciyes Üniversitesi'nden hocalarımıza da tüm etkinlik boyunca bizi yalnız bırakmadıkları için ÇOK ÇOK teşekkürler. Sizlerin desteği bizim için çok önemli!

Gün sonunda hediyeler vs derken Kayseri'de de bir kişiye yeni bir beyin hediye ederek geri döndük :) Haftaya Denizli'de görüşmek üzere...

Monday, December 21, 2009 4:38:28 AM (GTB Standard Time, UTC+02:00)  #    Comments [7]   .NET Framework 4.0 | ASP.NET 4.0 | C# | MVC | Silverlight 4 | Visual Basic 2010 | Visual Studio 2010 | WPF  | 
 Sunday, December 13, 2009

Bugün INETA NEXT'in İstanbul ayağını gerçekleştirdik. Kişisel olarak benim için efsanevi bir hafta sonu oldu! Tüm konuşmacılarımıza tek tek milyonlarca defa teşekkür ediyorum. Ayrıca tabi ki yağmura rağmen tüm salonu dolduran herkese de onlarca teşekkürler! Umarım herkes için de bir o kadar faydalı bir aktivite olmuştur.

Katılım zirvede bir seminer! INETA NEXT!
Katılım zirvede bir seminer! INETA NEXT!

İki gün boyunca hızlı bir "geleceğe bakış" attık. SL 4, VB10, CS4, ASP.NET 4, WF4, IIS Media Services, IE Development vs derken epey bir içeriğe hızlıca göz atma şansımız oldu. Tabi hediyelerimiz de eksik olmadı :) NEXT serisine uygun şekilde Windows 7 hediyemizin yanı sıra Windows 7 T-Shirtlerimiz, Visual Studio 2010 atkılarımız, laptop stickerlarımız! havalarda uçuştu desem yeridir :)

INETA NEXT İstanbul ayağı...
INETA NEXT İstanbul ayağı...

Tekrar katılan herkese defalarca teşekkürler. Çok yakında etkinlikte konuşan tüm konuşmacılarımızın sunumlarını ve video kayıtlarını da sizlerle www.inetatr.org üzerinden paylaşacağız. İçerikler ve paylaşımlar hazır olduğunda ben de twitter ve blog üzerinden duyuracağım.

Bu arada unutmayın :) blogumu sayfanın en üstündeki linkten kayıt olarak mail ile de takip edebilirsiniz.

Haftaya hafta sonu Kayseri'de görüşmek üzere!

Not: Tüm etkinlik fotoğraflarına buradan ulaşabilirsiniz: http://skydrive.live.com/inetanext09istanbul

Sunday, December 13, 2009 11:29:09 PM (GTB Standard Time, UTC+02:00)  #    Comments [3]   .NET Framework 4.0 | ASP.NET 4.0 | C# | IE 8.0 | Seminer | Silverlight 4 | Visual Basic 2010 | Visual Studio 2010 | WCF | WF  | 
 Monday, December 07, 2009

Bu hafta sonu iki gün boyunca INETA NEXT turumuzun ilk ayağı olan Diyarbaklır'daydık. Sevgili Muammer Benzeş ve Erkan Balaban ile beraber sunduğumuz oturumlarda, Silverlight 4, ASP.NET 4, VB 10, C# 4, Windows 7 ve WPF 4 gibi konulardan bahsettik. Benim için çok eğlenceli olduğu kadar da güzel bir iki gün oldu.

INETA NEXT Diyarbakır
INETA NEXT Diyarbakır

Organizasyon boyunca öğrenci katılımının yanı sıra Diyarbakır Belediyesi, Emniyet Müdürlüğü gibi birçok devlet kurumundan da görevli arkadaşlarla tanışma şansımız oldu. Yukarıdaki fotoğraftan görebileceğiniz üzere standart community aktivitelerine göre biraz yaş ortalaması yüksek :) Bu çerçevede anlattıklarımızın kısa vadede gerçek hayata geçmesi olasılığı da bir o kadat yüksek oluyor. Etkinlik sonunda dağıttığımız değerlendirme formlarından birindeki yorum hem etkinliğin faydasını hem de etkisini özetliyordu :) "Çok güzel ve yeni teknolojilerle neler yapılabileceği öğrendik. Artık yazılımcı ekibimizin bizden çekeceği var!" :)

Diyarbakır'da yazılım sektörü nerede?
Diyarbakır'da yazılım sektörü nerede?

Etkinliğimizde bulunan katılımcılardan Murat the Hiperaktive :) (Kendisine bu ismi taktık ama daha haberi yok) Diyarbakır'ın yazılım sektörü çerçevesinde ne kadar parlak bir noktada olduğunun ip uçlarını veriyor. Murat Bey bir müşterisinin ihtiyaçlarını tespit edip hem donanım hem de yazılım kısmı ile ilgilenerek gerekli çözümleri üretip gerçek hayata geçirmiş. Bunun gibi Diyarbakır içerisinde ve dışında kullanılan bir çok yazılımdan bahsetme şansı oldu bize. Özellikle bu yazılımlardan birini yakından inceleme şansımız oldu. Nasıl mı? Bir künefeci için yapmış olduğu sistemi yerinde gösterdi :) Yukarıdaki fotoğrafta da gördüğünüz üzere künefe siparişimi bir masadaki bir ekrandan giriyorum ve sipariş otomatik olarak alt kattaki bir bilgisayara düşüyor. Sistemin detaylarına girmeyeceğim fakat garsonsüz ve iki katlı bir künefecenin yaratılmasında bu yazılımın büyük katkısı olduğu kesin. Fikir süper, implementasyon süper! Kısmen tek kişilik dev kadro olarak kendisine "Helal olsun!" diyorum.

Etkinlik duyurusu Diyarbakır caddelerinde.
Etkinlik duyurusu Diyarbakır caddelerinde.

Etklinliğimize Dicle Üniversitesi ev sahipliği yaptı. Özellikle sevgili hocamız Mehmet Siraç Özerdem'e buradan milyonlarca kez teşekkür etmek istiyorum. Diyarbakır'da etkinliğimizin kahramanı olan hocamızın misafirperverliği kesinlikle istisnai bir mükemmeliğe sahipti. Tabi ek olarak konuşmacılarımıza ve tüm katılımcılarımıza da onlarca teşekkürler. İki gün boyunca bizi yalnız bırakmadınız.

Umarım katılan herkes için faydalı bir etkinlik olmuştur. Bizim için muhteşemdi. INETA NEXT Turu'na Diyarbakırı dahil ettiğimiz için ÇOK memnun kaldım. Bir dahakine görüşmek üzere Diyarbakır!

Monday, December 07, 2009 1:12:40 PM (GTB Standard Time, UTC+02:00)  #    Comments [6]   ASP.NET 4.0 | C# | Silverlight 4 | Visual Basic 2010 | WPF  | 
 Sunday, November 29, 2009

INETA NEXT etkinliklerimizle ilgili duyuruyu bundan yaklaşık bir hafta önce sizinle paylaşmıştım. Maalesef o zamanlarda içeriği paylaşma şansımız yoktu çünkü içeriğimizde daha Microsoft tarafından lansmanı yapılmamış ürünlere dair oturumlar olacaktı :) Eh artık zamanı geldi ve içeriğimizi paylaşmaktan gurur duyuyorum.

Diyarbakır - Dicle Üniversitesi, Tıp Fakültesi Konferans Salonu
5 Aralık
11.00-12.30 Visual Basic  10 Yenilikleri - Daron Yöndem (yazgelistir.com)
14.00-15.30 Windows 7'de neler var? - Muammer Benzeş (birliktegelistir.com)
16.00-17.00 Silverlight 4 - Daron Yöndem (yazgelistir.com)
6 Aralık
11.00-12.30 C# 4.0 Yenilikleri - Erkan Balaban (ceviz.net)
14.00-15.30 WPF 4 ile 3D Animasyon Programlama - Daron Yöndem  (yazgelistir.com)
16.00-17.30 ASP.NET 4.0 - Erkan Balaban (ceviz.net)

İstanbul - Microsoft Ofisi (Kroki)
12 Aralık
;
10.00-11.00 Silverlight 4 - Daron Yöndem (yazgelistir.com)
11.00-12.00 ASP.NET MVC 2 - Oğuz Yağmur (csharpnedir.com)
14.00-15.00 IIS Media Services - Muammer Benzeş (birliktegelistir.com)
15.15-16.15 Visual Basic 10 Yenilikleri - Daron Yöndem (yazgelistir.com)
13 Aralık
11.00-12.30 ASP.NET 4.0 Yenilikleri - Uğur Umutluoğlu (nedirtv.com)
14.30-15.45 Workflow Foundation 4.0 - Burak Selim Şenyurt (csharpnedir.com)
16.00-17.00 C# 4.0 Yenilikleri - Erkan Balaban (ceviz.net)
17.15-18.00 IE 8 Toolbar Geliştirme  - Barış Kanlıca (yazgelistir.com)

Kayseri - Erciyes Üniversitesi Mühendislik Fakültesi Konferans Salonu
19 Aralık
11.00-12.30 C# 4.0 Yenilikleri -Burak Selim Şenyurt  (csharpnedir.com)
14.00-15.30 Silverlight 4 - Daron Yöndem (yazgelistir.com)
15.45-16.45 ASP.NET 4.0 - Selçuk Yavuz (ceviz.net)

20 Aralık
11.00-12.30 ASP.NET MVC 2 - Selçuk Yavuz (ceviz.net)
14.00-15.30 Visual Basic 10 Yenilikleri - Daron Yöndem (yazgelistir.com)
15.45-16.45 Workflow Foundation 4.0 - Burak Selim Şenyurt (csharpnedir.com) 

Denizli - Pamukkale Üniversitesi Kongre Kültür Merkezi Ana Salon
26 Aralık
11.00-12.30 Silverlight 4.0 - Daron Yöndem (yazgelistir.com)
14.00-15.30 C# 4.0 Yenilikleri - Oğuz Yağmur (csharpnedir.com)
15.45-16.45 Asp.NET 4.0 Yenilikleri - Uğur Umutluoğlu (nedirtv.com)
27 Aralık
11.00-.12.30 Visual Basic 10 Yenilikleri - Daron Yöndem (yazgelistir.com)
14.00-15.30 Asp.NET MVC 2 - Oğuz Yağmur (csharpnedir.com)
15.45-16.45 ASP.NET AJAX 4.0 - Uğur Umutluoğlu (nedirtv.com)

Kayıt için www.inetatr.org adresini ziyaret etmeyi unutmayın!

Bu arada ilk etkinlik duyurumuzda da yer alan "Bir katılımcıya yeni bir beyin verilecektir" :) cümlesi biraz merak uyandırmış. Zaten amacı da buydu söz konusu cümlenin. Merak etmeye devam etmeniz gerekecek fakat emin olun bir katılımcıya çekilişle yeni bir beyin vereceğiz :) Bizde yalan yok :) Ayrıca birçok da sürpriz hediye olacak, benden söylemesi.

Sunday, November 29, 2009 2:43:22 PM (GTB Standard Time, UTC+02:00)  #    Comments [11]   .NET Framework 4.0 | ASP.NET | ASP.NET 4.0 | C# | IIS 7.0 | Seminer | Silverlight 4 | Visual Basic 2010 | Visual Studio 2010 | WCF | WF | Windows 7 | WPF  | 
 Friday, November 13, 2009

Haftaya çok heyecanlı bir hafta olacak. Los Angeles'taki PDC (Professional Developer Conference) ile beraber birçok yenilik bizi bekliyor. Büyük süprizler var. Hazır tüm bu sürprizler taze taze gelirken bir de INETA olarak Aralık yakında INETA NEXT etkinliğimizi gerçekleştirme kararı aldık! Bu sefer biraz daha farklı bir konsept ile etkinliği dört ayrı şehirde yapacağız!

INETA NEXT bomba gibi geliyor!
INETA NEXT bomba gibi geliyor!

Gerçekte de bomba gibi geliyor. Şu anda maalesef etkinlik içeriklerini duyurma şansımız yok çünkü malum zaten çoğu konuda daha Microsoft tarafında da haftaya duyurulacak :) O nedenle hemen tarihleri ve kayıt olma şansını sizinle paylaşalım istedik. İleriki haftalarda ayrıca içeriği de tabi ki paylaşacağız! Bu arada unutmadan! Her ilde bir kişiye yepyeni bir beyin veriyoruz! Benden söylemesi :)

Dört ayrı ilde hep beraber görüşmek üzere! Kayıt olmayı unutmayın!

Not: Herkesten duyuru konusunda destek istiyoruz :) Aşağıdaki bannerı bloglarınızda, sitelerinizde paylaşabilirseniz muhteşem olur! Tüm desteğiniz için çok teşekkürler.

INETA NEXT Banner

Friday, November 13, 2009 2:57:04 PM (GTB Standard Time, UTC+02:00)  #    Comments [12]   ASP.NET 4.0 | Silverlight 4 | .NET Framework 4.0  | 
 Friday, September 18, 2009

Visual Studio 2010 ile beraber gelecek olan Web.Config Transformasyonu projelerinizi Staging, Production gibi ortamlara daha rahat deploy etmenizi sağlayacaktır. Zekice bir özellik!

Yukarıdaki videoyu bilgisayarına indirmek isteyenler nedirtv.com'u ziyaret edebilirler.

İyi seyirler...

Friday, September 18, 2009 11:31:53 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]   ASP.NET 4.0 | Visual Studio 2010  | 
 Tuesday, September 15, 2009

URLReWrite, URLMapping veya URLRouting adını ne koyarsanız koyun bugün web projelerinin olmazsa olmazlarından biri de web siteleri içi linklerin okunabilir ve arama motorları tarafından rahatlıkla anlaşılabilir hale getirilmesi. Bunun için kullanılabilecek kolay veya zor birçok teknik var. Bunlardan bazıları request başına gelen adresi alıp değerlendirirken bazıları daha alt seviyelerden de ilerleyebiliyor. Bu noktada bence önemli olan olabildiğince dış ürün veya kütüphanelere başvurmadan ASP.NET içinde çözümü üretiyor olmak.

Aslında URLRouting şu anda ASP.NET MVC'de ve DynamicData projelerinde zaten kullanılıyor. Birkaç takla atarak aynı kütüphaneleri normal ASP.NET projelerine almak da mümkün. ASP.NET 4.0 tarafında ise çok daha rahat kullanıma sahip bir şekilde URLRouting karşımıza çıkıyor.

İlk olarak gelin Routing kurallarımızı belirleyelim. Bunun için sitemize bir Global.asax dosyası ekleyerek Application'ın Start event'ında gerekli tanımlamaları yapabiliyoruz.

[VB]

Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)

    Routing.RouteTable.Routes.Add("Sayfalar",

                                new Routing.Route("sayfa/{adi}",

                                new Web.Routing.PageRouteHandler("~/sayfa.aspx")))

End Sub

Yukarıda gördüğünüz kod içerisinde sanal yol olarak tanımladığımız sayfa/Daron şeklindeki adresleri sayfa.aspx'e yönlendiriyoruz. Peki "daron" parametresine ne oldu dediğinizi duyar gibiyim. Dikkat ettiyseniz aslında Daron parametresini adi adında bir değişkene aktarmış olduk. Bu değişken otomatik olarak sayfa.aspx'e gönderilecek. Sayfa.aspx içerisinde bu gibi parametrelere ulaşmak için de aşağıdaki kodu kullanabiliyoruz.

[VB]

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    Dim Gelen As String = Page.RouteData.Values("adi")

    Response.Write(Gelen)

End Sub

İşte bu kadar basit. Ne kadar kolay değil mi? İsterseniz Application Startup durumda çok sayıda Routing tanımlayabilirsiniz. Tüm bu Routingler içerisindeki değerler uygun sayfalara parametre olarak gönderilecektir. Söz konusu sayfalar da bu parametreleri alarak gerekli işlemleri yapabilirler.

RouteUrl ve RouteValue

Peki ya belirli bir sayfadan diğerine link vereceksek? Hatta link verilen sayfada da parametreyi sayfa içerisindeki HTML kodunda kullanacaksak? Bir üstteki örnekte basit bir şekilde "Daron" parametresini sayfa Routing'ine gönderdik ve sayfa.aspx de bunu alıp ekrana yazdı. Oysa bunu yapmanın çok daha kolay bir yolu daha var.

Kısa yolda URLRouting'e özel link.
Kısa yolda URLRouting'e özel link.

Gördüğünüz gibi expression builderlar kullanarak hızlıca gerekli linki yaratabiliyoruz. İşin güzel tarafı eğer Global.asax içerisinde parametre olarak "adi" parametresini alan Routing kuralını değiştirirseniz bir anda tüm projenizdeki linklerin de uygun şekilde değişip güncel hallerinin yaratılıyor olması. Böylece hiç uğraşmadan dinamik bir altyapı yaratmış oluyorsunuz.

[ASP.NET]

<form id="form1" runat="server">

    <asp:Label ID="Label1" runat="server" Text="<%$RouteValue:adi%>" />

</form>

Ayrıca yukarıdaki şekilde herhangi bir sayfaya gelen parametreyi de RouteValue expression ile rahatlıkla alıp sayfada kullanabilirsiniz.

Hepinize kolay gelsin.

Tuesday, September 15, 2009 12:23:02 PM (GTB Standard Time, UTC+02:00)  #    Comments [13]   ASP.NET 4.0  | 
 Monday, September 14, 2009

ASP.NET'teki performans optimizasyonu açısından en sevmediğimiz fakat yine işimizi kolaylaştırdığı için kullanmak durumunda kaldığımız bir diğer özellik de ViewState. Sayfa içerisinde kontrollerin State/Durum'larını saklayabilmesini ve PostBack sonrasında aynı durum ile devam edebilmesini sağlayan bu altyapı neden sevilmez?

ViewState canavarı!
ViewState canavarı!

İşte tam da yukarıdaki manzara nedeniyle ViewState'i sevmeyiz oysa ViewState candır :) Çünkü işimizi çok kolaylaştırır. Önemli olan tam olarak nerede ViewState'i kullanacağımıza karar vermemizdir. Örneğin bir web sayfasında hiç postback yoksa neden ViewState kullanalım? Eğer söz konusu sayfadan sürekli başka sayfalara yönlendirmeler yapıyorsanız ne gerek var? Veya daha da farklısı, sayfanın kendi state'ini saklamasına gerek yoksa neden kullanalım? Varsayılan ayarları ile her yerde açık gelen bu ViewState canavarını eğer kontrol ederseniz aslında çok da faydanıza çalışabilir bir araç haline gelebilir.

Bugüne kadar ViewState'i sayfa bazında veya kontrol bazında pasif hale getirebiliyorduk. Bunun için basit bir şekilde kontrolümüzün EnableViewState özelliğini değiştirmemiz yeterli oluyordu.

[ASP.NET]

 <asp:GridView EnableViewState="true" ID="BirGrid" runat="server">

</asp:GridView>

Ama ufak bir sorun var. Ya ben tüm sayfada ViewState'i kapatmak fakat özellikle bir kontrol için açmak istiyorsam? Maalesef bunu yapamıyoruz. Peki o zaman bu makalenin amacı ne? ASP.NET 4.0 ile beraber artık kontrol başına birbirinden bağımsız olarak ViewState'in kullanılıp kullanılmayacağını ayarlayabiliyorsunuz.

ViewStateMode karşınızda.
ViewStateMode karşınızda.

Artık tüm sayfada ViewState'i kapatsanız da kontrol başına ViewStateMode ayarlayarak ilerleyebilirsiniz. Söz konusu ayara ait seçenekler zaten çok basit. Enabled / Disable ViewState'i o kontrol için açıp kapatırken Inherit ise bir üst kontrolün özelliğinin alt kontrolde de geçerli olmasını sağlıyor.

Hepinize kolay gelsin.

Monday, September 14, 2009 12:21:25 PM (GTB Standard Time, UTC+02:00)  #    Comments [7]   ASP.NET 4.0  | 
 Sunday, September 13, 2009

ASP.NET'te en sevmediğim özelliklerden biri yaratılan HTML kodu üzerindeki kontrolün pek de mümkün olmaması. Aslında bu sevmediğim özellik ASP.NET'in işimizi bu kadar kolaylaştırabilmesini sağlayan en önemli altyapısı ile ilişkili. Fakat derdime çare arayacak olsam aslında tam olarak da yaratılan HTML kontrollerinin ID'lerine takıldığımı söyleyebilirim. Boyumu aşan ID'leri kontrol edememek bir de bu ID'lere JavaScript ile ulaşmak zorunda kalmak ölümcül bir deneyim!

Neden bahsediyorsun?

Bahsettiğim şey aslında basit bir Repeater bile olabilir. Örneğin sayfanıza bir Repeater yerleştirdiniz ve içinde de çok basit bir Label bulunuyor. Aslında tek yapmak istediğiniz elinizdeki ürünlerin isimlerini listelemek diyelim. Bu durumda kabaca kullanacağınız Repeater yapısı aşağıdaki gibi olacaktır.

[ASP.NET]

<asp:repeater id="Repeater1" runat="server">

    <ItemTemplate>

        <asp:Label ID="lbl_UrunAdi" runat="server" Text='<%# Eval("Adi") %>'></asp:Label>

    </ItemTemplate>

</asp:repeater>

Peki bu ASP.NET kodu çalıştığında ortaya HTML olarak ne çıkacak dersiniz? Gelin aşağıdaki HTML'i beraber inceleyelim.

 [HTML]

<span id="Repeater1_ctl00_lbl_UrunAdi">Örnek1</span>

<span id="Repeater1_ctl01_lbl_UrunAdi">Örnek2</span>

<span id="Repeater1_ctl02_lbl_UrunAdi">Örnek3</span>

<span id="Repeater1_ctl03_lbl_UrunAdi">Örnek4</span>

<span id="Repeater1_ctl04_lbl_UrunAdi">Örnek5</span>

<span id="Repeater1_ctl05_lbl_UrunAdi">Örnek6</span>

<span id="Repeater1_ctl06_lbl_UrunAdi">Örnek7</span>

<span id="Repeater1_ctl07_lbl_UrunAdi">Örnek8</span>

<span id="Repeater1_ctl08_lbl_UrunAdi">Örnek9</span>

<span id="Repeater1_ctl09_lbl_UrunAdi">Örnek10</span>

Yukarıdaki kodda da gördüğünüz üzere her bir Label / Span tagının ayrı bir ID'si var. Zaten olması gereken de bu, çünkü bir sayfada ancak aynı ID'den bir adet bulunabilir. Fakat ASP.NET'in bu farklı ID'leri yaratırken izlediği yol biraz farklı. İlk olarak container elementin adı alınıyor sonra ctl ile başlayan satır Index numarası kullanılıyor sonra da içerideki orijinal kontrolün adı ekleniyor ve ortaya kocaman bir ID çıkıyor. Bu ID'lerin her birini üç karakterlik isimlere kısaltmış olsak ciddi miktarda web sitesi trafiğini de azaltmış olacağız. Hadi trafiği geçtik bu Label'lardan birine JavaScript ile ulaşmak isterseniz ne yapacaksınız? Eminim çoğunuzun dinamik JavaScript kodları yarattığı ve içlerine sunucu tarafından istedikleri kontrollerin ClientID'lerini koydukları günler vardı. Geçmiş zamanla konuşuyorum çünkü ASP.NET 4.0 ile bu sistem değişiyor.

Hoş geldin ClientIDMode!
Hoş geldin ClientIDMode!

Artık kontrol başına ClientIDMode belirleyerek söz konusu kontrolün istemci taraflı ID'sinin ne şekilde yaratılacağını kontrol edebiliyoruz. Peki ClientIDMode için gelen seçenekler nelerdir?

AutoID: Herşey eskisi gibi devam eder.
Inherit: Bir üst kontrolde bu özellik nasıl ayarlanmış ise aynısı alt kontrolde de geçerli olur.
Predictable: Eski ID'lere benzeye fakat şekli şemali kontrol edilebilir ID yapıları oluşturulmasını sağlar. Bu yapı daha fazla DataBound kontrollerin içi için kullanılır.
Static: Söz konusu kontrolün sunucu tarafındaki ID'si ne ise istemci tarafındaki da bire bir aynı olur. Bu noktada bir sayfa içerisinde aynı ID'nin tekrar kullanılmaması sizin sorumluluğunuzdadır. Özellikle Repeater gibi yapıların içinde kullanımı tehlikeli olabilir.

Static

Eğer herhangi bir kontrolün ClientIDMode'unu Static olarak ayarlarsanız sunucu tarafındaki ID doğrudan istemciye gönderilecektir. Örneğin bir üstteki Repeater içerisindeki Label'ın ClientIDMode özelliğini Static yaparsak alacağımız sonuç aşağıdaki gibi olur.

[HTML]

 <span id="lbl_UrunAdi">Örnek1</span>

<span id="lbl_UrunAdi">Örnek2</span>

<span id="lbl_UrunAdi">Örnek3</span>

<span id="lbl_UrunAdi">Örnek4</span>

<span id="lbl_UrunAdi">Örnek5</span>

<span id="lbl_UrunAdi">Örnek6</span>

<span id="lbl_UrunAdi">Örnek7</span>

<span id="lbl_UrunAdi">Örnek8</span>

<span id="lbl_UrunAdi">Örnek9</span>

<span id="lbl_UrunAdi">Örnek10</span>

Gördüğünüz gibi tüm Span tagları aynı ID özelliğine sahip. Bu durum tabi ki tehlikeli çünkü bu durumda bir JavaScript ile bu kontrollerin hiçbirini bulamayız. Zaten durum kurallara aykırı fakat yaptığımız hata basit. Static modu kesinlikle DataBound kontrollerin içerisindeki kontrollerde kullanılmamalı. DataBound kontroller hariç sayfada tekil kullandığınız kontroller için rahatlıkla Static modunu kullanabilirsiniz.

Predictable

Databound kontrollerin içi için kullanılabilecek en anlamlı çözüm Predictable modudur. Bu modda varsayılan ayarları ile ilk önce container elementin ismi alınır sonra iç elementin ismi alınır ve en sona da Index numarası yerleştirilir. Yine en üstteki Repeater örneğimizi ele alalım ve Repeater'ın ClientIDMode özelliğini aşağıdaki gibi Predictable şeklinde düzenleyelim.

[ASP.NET]

<asp:Repeater ID="Repeater1" runat="server" ClientIDMode="Predictable">

    <ItemTemplate>

        <asp:Label ID="lbl_UrunAdi" runat="server" Text='<%# Eval("Adi") %>'></asp:Label>

    </ItemTemplate>

</asp:Repeater>

Kodumuzu çalıştırdığımız aldığımız HTML sonucu aşağıdaki şekilde olacaktır.

 <span id="Repeater1_lbl_UrunAdi_0">Örnek1</span>

<span id="Repeater1_lbl_UrunAdi_1">Örnek2</span>

<span id="Repeater1_lbl_UrunAdi_2">Örnek3</span>

<span id="Repeater1_lbl_UrunAdi_3">Örnek4</span>

Gördüğünüz gibi en azından bildiğim isimler kullanılmış ve ana repeater'in isminin yanına label'ın ismi sonra da Index numarası yerleştirilmiş. Bu noktada maalesef Repeater ve Label'a verdiğimiz isimlerin uzunlukları da önem kazanıyor.

Predictable modunda kullanabileceğiniz bir diğer özellik ise ClientIDRowSuffix özelliği. Fakat maalesef bu özelliği sadece DataKey koleysiyonları tutan kontrollerde kullanabilirsiniz. Örneğin bir GridView bunun için uygun olacaktır.

[ASP.NET]

<asp:gridview id="BirGrid" runat="server" autogeneratecolumns="false" clientidmode="Predictable"

    clientidrowsuffix="ID">

    <Columns>

        <asp:TemplateField HeaderText="ID">

            <ItemTemplate>

                <asp:Label ID="lbl_Adi" runat="server" Text='<%# Eval("Adi") %>' />

            </ItemTemplate>

        </asp:TemplateField>

    </Columns>

</asp:gridview>

Yukarıda gördüğünüz GridView'ın ClientIDRowSuffix özelliğine ID değeri verilmiş. Böylece yaratılan ID'lerin sonunda artık Index numarası değil doğrudan veritabanından gelen ID değeri yerleştirilecek.

[HTML]

<table cellspacing="0" rules="all" border="1" id="BirGrid" style="border-collapse: collapse;">

    <tr>

        <th scope="col">

            ID

        </th>

    </tr>

    <tr>

        <td>

            <span id="BirGrid_lbl_Adi_3">Örnek1</span>

        </td>

    </tr>

    <tr>

        <td>

            <span id="BirGrid_lbl_Adi_4">Örnek2</span>

        </td>

    </tr>

    <tr>

        <td>

            <span id="BirGrid_lbl_Adi_5">Örnek3</span>

        </td>

    </tr>

    <tr>

        <td>

            <span id="BirGrid_lbl_Adi_6">Örnek4</span>

        </td>

    </tr>

Hemen kodumuzdaki Label'ların ID'lerine bakarsak Grid'in adını, sonra Label'ın adını ve en sonunda da ID değerlerini görebiliyoruz. Malum ID değerlerin kayıtların sırası ile aynı olmayabilirler. Bu gibi bir teknik ile kontrollerin ID'leri set edildiğinde JavaScript ile veritabanından gelen değerlere göre sayfada uygun kontrolleri bulmak da çok daha kolaylaşıyor.

Başka nasıl ayarlanır?

Eğer isterseniz ClientIDMode özelliğini projelerinde sayfa bazında veya uygulama bazında da ayarlayabilirsiniz.

<%@ Page Language="VB" AutoEventWireup="false" ClientIDMode="Static" CodeFile="Default.aspx.vb" Inherits="_Default" %>

Yukarıdaki şekli ile bir sayfada ClientIDMode ayarlamak tüm sayfa için geçerli olmasını sağlayacaktır. Ayrıca uygulama bazında da Web.Config içerisinde gerekli ayarı yapabilirsiniz.

<system.web>

    <pages clientIdMode="Predictable"></pages>

</system.web>

Hepinize kolay gelsin.

Sunday, September 13, 2009 12:19:39 PM (GTB Standard Time, UTC+02:00)  #    Comments [1]   ASP.NET 4.0  | 
 Tuesday, March 31, 2009

Uzun bir aradan sonra tekrar güzel bir etkinlik ile karşınızdayız. Bundan yaklaşık iki ay önce sizlere erken duyurusunu yaptığım NEXT HIT etkinliğimizin programını duyurmanın zamanı geldi!

11 Nisan

09.30-10.00    Açılış
10.00-10.45    Windows 7 Deep-Dive  - Mehmet Nuri Çankaya
11.00-13.00    Silverlight 3.0 - Daron Yöndem
14.00-15.30    Bulut Bilişimi ve Azure - Panel
16.00-17.00    PHP On Windows ve Hyper-V - Muammer Benzeş

12 Nisan

10.00-12.00    Sürpriz Oturum - Daron Yöndem
13.00-15.00    ASP.NET 4.0 - Uğur Umutluoğlu
15.15-17.00    WCF 4.0 ve WF 4.0 - Burak Selim Şenyurt

Programımız epey yoğun ve muhteşem yenilikler var. Konularımızın hepsi taze. Eminim ki hemen akıllarda "Süpriz Oturum nedir?" sorusu belirecek. Süpriz oturumumuzu şu anda açıklayamıyoruz. Süprizimizi ancak 11 Nisan günü açıklayabileceğiz.

Katılım için ne yapmam gerek?

Aktivitemiz Yıldız Teknik Üniversitesi, Beşiktaş Kampüsü Oditoryumu'nda gerçekleşecek. Katılım için inetatr.org adresinden kayıt yaptırmanız yeterli. Bir önceki Professional Hit'te olduğu gibi yer sıkıntımız yok, veya size tekrar kayıt olmanız için ikinci mailler atmayacağız. Bu konuda geçen sefer yaşanan sıkıntıları çok net biliyorum ve bu neden özellikle üzerinde durarak bu sıkıntıların tekrar yaşanmayacağı konusunda emin olmanızı istiyorum.

Hepinize 11-12 Nisan'da görüşmek üzere! Unutmadan, güzel hediyelerimiz var :) bu sefer "su" sıkıntımız da yok :)

Dipnot!

Bu aktivite için blogumu okuyan herkesten duyuru anlamında yardım rica ediyorum. "Haberimiz yoktu" diyerek aktivite sonrası mail atan çok kişi oluyor. O nedenle elinizden geldiğince duyuru konusunda yardımcı olabilirseniz herkesin rahatlıkla faydalanmasını sağlayabiliriz. Şimdiden hepinize çok teşekkürler.

Tuesday, March 31, 2009 12:14:45 AM (GTB Standard Time, UTC+02:00)  #    Comments [7]   Silverlight 3.0 | WCF | WF | Windows 7 | WPF | ASP.NET 4.0  | 
Copyright © 2010 Daron Yöndem. Tüm hakları saklıdır.