Nedirtv Söyleşilerine Başladık

Adında her ne kadar TV kelimesi geçiyor olsa da, yeni başlattığımız seri ile Nedirtv'de artık ses dosyası olarak görüntüsüz söyleşilerimize de yer vermeye başladık. Burak Selim Şenyurt ve Selçuk Yavuz ile aynı şirkette çalışıp, uzun zamandır böyle bir projeyi düşünüp, üstüne Ramazan ayı nedeniyle de öğle aralarında boş zaman bulunca, aldık mikrofonumuzu ve faydalı olabileceğini düşündüğümüz konular üzerine sohbetler yapmaya karar verdik.  Bu söyleşilerin ilkini geçtiğimiz günlerde yayınladık ve bu söyleşi bir gün içerisinde yaklaşık 500 kez dinlendi. Böylesine bir ilginin bizi oldukça mutlu ettiğini söyleyebilirim.

Efendim, konuyu çok uzun uzun yazmaya gerek yok. İlk söyleşimizde web geliştiricilerin son zamanlarda en çok sorduğu sorulardan birine cevap bulmaya çalıştık ve ASP.NET MVC Framework ile ASP.NET WebForms yapıları üzerine konuştuk. Az önce ise ikinci söyleşimiz olan Yazılım Geliştirmede Takım Çalışması konulu söyleşimizi yayına aldık. Darısı sonraki söyleşilere :)

İlerleyen zamanlarda sektörümüzden önemli ve farklı kişilerle de değişik konularda söyleşilere devam edeceğiz. Söyleşilerimizde dinlemek istediğiniz konular varsa bize ulaşıp fikirlerinizi iletebilirsiniz. Konu ile ilgili gerek bu yazıya yorum bırakabilir, gerekse bana veya Burak ile Selçuk Hoca'ya mail atabilirsiniz.

26 Ağustos 2010 Perşembe 23:50

Yorum - RSSYorumlar (1)

Kategori: Duyuru-Haber

facebook'da Paylaş   twitter'da Paylaş   friendfeed'de Paylaş   del.icio.us'da Paylaş   stumpleupon'da Paylaş   Permalink

INETA NEXT ile Aralık Ayında Türkiye’yi Geziyoruz

Aralık ayı içerisinde Diyarbakır, İstanbul, Kayseri ve Denizli’de yakın gelecekte kullanacağımız yazılım teknolojileri anlatmak üzere Türkiye turuna çıkıyoruz. INETA üyesi topluluklardan konuşmacıların katılacağı ve ağırlıklı olarak .NET Framework 4.0 konularının anlatılacağı bu seminerlere fırsatı olan herkesin katılmasını tavsiye ediyorum. Ben İstanbul ve Denizli illerindeki etkinliklerde ASP.NET 4.0 ve ASP.NET AJAX 4.0 konularında paylaşımlarda bulunacağım.

Etkinlik programı ise şöyle:

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)
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)


Etkinliğe katılmak için kayıt olmanız gerekiyor. http://www.inetatr.org adresinden katılım formunu doldurabilirsiniz.

1 Aralık 2009 Salı 10:02

Yorum - RSSYorumlar (0)

Kategori: Duyuru-Haber

facebook'da Paylaş   twitter'da Paylaş   friendfeed'de Paylaş   del.icio.us'da Paylaş   stumpleupon'da Paylaş   Permalink

URL Routing Ayarlarını Özelleştirmek

ASP.NET MVC uygulamalarında adres formatıları URL Routing adını verdiğimiz mekanizma tarafından yönetilmektedir. {controller}/{action}/{id} formatındaki URL prototipi her ihtiyacı karşılamayacağı için farklı adres formatları oluşturmak istediğimizde nasıl bir yol izlemeliyiz? Bu yazımızda farklı URL Routing ayarlarını nasıl gerçekleştirebileceğimizi inceleyeceğiz.

Varsayılan URL Routing ayarları dışında farklı URL yönlendirme tanımlamaları yapmak için yine Global.asax dosyasındaki Application_Start metodunu(dolayısıyla RegisterRoutes metodunu) güncellememiz gerekecektir. Öncelikli olarak farklı olacak URL adresimizin nasıl olacağını belirlemek lazım. Oluşan URL'in şablonuna göre RouteCollection nesnesinin MapRoute metodu aracılığıyla gerekli URL Routing formatlamasını yapmalı, hangi Controller nesnesinin, Action metodunun çağrılacağını ve bu metoda hangi parametrenin gönderileceğini belirtmek gerekecektir. Yapılan URL tanımlamasına istersek belirli kısıtlamalar da getirebiliyoruz, ama bu konuyu aksilik olmazsa bir sonraki yazımızda inceleyeceğiz. Dilerseniz basit bir URL yönlendirmesinin nasıl yapılabileceğini inceleyelim.

Adres formatımız şöyle olsun; www.umutluoglu.com/Haber/Visual-Studio-2010-Beta1-Duyuruldu. Dikkat ederseniz standart URL Routing ayarlarına göre bir değerimiz eksik, toplam iki tane değerimiz var; Haber ve haberin başlığı. Şimdi, bu URL'in arkaplanda bir controller nesnesinin action metoduna gitmesi gerekiyor. Sonuçta burada haber detayını getirecek bir metodumuzun olması yeterli. O zaman controller ve action'a isimlerini verelim; HaberController ve Oku. Diğer yandan haberin başlığını metodumuza parametre olarak göndermemiz de gerekecektir. Yani şablon olarak Haber/{baslik} şeklinde URL'lerimiz olacak. Burada haber başlığı parametrik olacağı için {baslik} şeklinde süslü parantezlerle yazılması gerekiyor. MapRoute metoduna baktığımız zaman ilk parametremiz yönlendirme ayarına verilen bir isim, ikinci parametre URL şablonu, üçüncü parametre ise varsayılan controller-action-baslik değerleri olacak. Aşağıda bu yönlendirmenin nasıl kodlanacağı görülmektedir.

Global.asax
public
class MvcApplication : System.Web.HttpApplication

{

    public static void RegisterRoutes(RouteCollection routes)

    {

        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

 

        routes.MapRoute(

            "HaberOkuma",

            "Haber/{baslik}",

            new { controller = "Haber", action = "Oku" }

        );

 

       routes.MapRoute(

            "Default",                                              // Route name

            "{controller}/{action}/{id}",                           // URL with parameters

            new { controller = "Home", action = "Index", id = ""// Parameter defaults

        );
   }
}

Görüldüğü gibi ikinci parametre URL'in formatı, üçüncü parametre ise varsayılan controller ve action değerleri oldu. URL formatında sadece {baslik} değeri var, dolayısıyla bu yönlendirmedeki controller ve action değerleri sabit, baslik ise değişen değer olacak. Controller HaberController, action metodu Oku olmalı ve de Oku metodu baslik adında bir parametre almalıdır. URL ayarlamasına açıklık getirdiğimize göre şimdi bu formattaki URL'leri karşılayacak Controller sınıfımızı oluşturalım.

ÖNEMLİ NOT: Dikkat edilirse HaberOkuYonlendirme isimli yönlendirme ayarı Default adındaki varsayılan ayarın üstünde tanımlanmış. Eğer tanımlamaların sıralaması değişirse Haber/Visual-Studio-2010-Beta1-Duyuruldu şeklindeki URL'de Haber controller, Visual-Studio-2010-Beta1-Duyuruldu ise action metodu olarak ele alınır ve bu talebe cevap verilemez(hata sayfası döndürülür). Oysaki bizim controller nesnemiz Haber ve action metodumuz Oku idi. Buradan şu sonuca varabiliriz; özel URL ayarları genellikle varsayılan URL ayarının üstünde yapılır! Ama bu her zaman geçerli olmayabilir. URL formatlarında çakışma olup olmadığı mutlaka test edilmelidir.

Controllers/HaberController.cs
public
class HaberController : Controller

{

    public ActionResult Index()

    {

        return View();

    }

 

    public ActionResult Oku(string baslik)

    {

        ViewData["header"] = "Haberin başlığı: " + baslik;

 

        return View();

    }

}

Çıktı elde edebilmek için projemize bir de View nesnesi ekleyelim. Oku metodunun içerisinde mouse ile sağ tıklayıp Add View seçeneğinden Oku adında bir View nesnesi ekliyoruz. Oku.aspx sayfasına sadece ViewData nesnesinin içeriğini yazdıracağız.

Views/Haber/Oku.aspx
<%
@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>

 

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">

    Oku

</asp:Content>

 

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

 

    <h2>Haber Okuma Sayfası</h2>

 

    <%=ViewData["header"] %>

 

</asp:Content>

URL Routing ayarı, Controller nesnesi ve View nesnesi hazır, o halde URL'i test edebiliriz.


Resim: Yapılan yeni ayarlamadan sonra Haber/{baslik} formatındaki bir talebin cevabı

Görüldüğü gibi Haber/Visual-Studio-2010-Beta1-Duyuruldu şeklindeki URL HaberController sınıfının Oku metoduna talep olarak gönderildi. Metodun baslik parametresi de URL'in sonundaki değeri aldı. İşte bu şekilde tanımlamalar yaparak kendi özel URL formatlarımızı oluşturabiliriz.


Birden Fazla Parametreyi Action Metoduna Göndermek

İhtiyacımız olabilecek bir diğer durumu da URL içerisinde yer iki değişken değerin action metoduna gönderilmesi olabilir. Burada dikkat edeceğimiz nokta metottaki parametre sırası nasılsa URL'de de aynı şekilde olmalıdır. Şöyle bir URL örneği üzerinden devam edelim; www.umutluoglu.com/Haber/Liste/Duyuru/NormalSirala. URL'in amacı belirli bir kategorideki haberleri istenilen sırada getirmesi; örneğin Duyuru/NormalSirala şeklindeki bir URL Duyuru kategorisindeki haberlerin alfabetik olarak A'dan Z'ye doğru sıralanmasını sağlarken, Bilisim/TersSirala şeklindeki bir URL Bilisim kategorisindeki haberlerin alfabetik olarak Z'den A'ya doğru sıralanmasını sağlıyor. Bakalım bu tarz bir URL Routing ayarlaması ve bu ayarlamaya karşılık gelecek action metodu nasıl yazılıyormuş;

Global.asax

 public static void RegisterRoutes(RouteCollection routes)

{

      ...

 

      routes.MapRoute(

            "HaberKategoriSiralama",

            "Haber/Liste/{kategori}/{sira}",

            new { controller = "Haber", action = "KategoriListe" }

      );
}


Controllers/HaberController.cs
public class HaberController : Controller

{

    ...

 

    public ActionResult KategoriListe(string kategori, string sira)

    {

        if(sira == "TersSirala")

            ViewData["bilgi"] = kategori + " kategorisindeki haberler ters sırada getirildi";

        else

            ViewData["bilgi"] = kategori + " kategorisindeki haberler normal sırada getirildi";

 

        return View();

     }

}

Burada dikkat edilmesi gereken durum kategori ve sira değerlerinin sıralaması olacaktır. Duyuru/NormalSirala şeklinde bir URL'de kategori=Normal, sira=NormalSirala olacaktır. Yani kazara yazılan NormalSirala/Duyuru şeklindeki bir URL'deki değerler elbetteki düzgün yorumlanamayacağı için kategori=NormalSirala, sira=Duyuru olarak algılanır. Hemen URL'in testini yapıyoruz.


Resim: Haber/Liste/{kategori}/{sira} şablonundaki bir URL'e gelen talebin cevabı

Peki, URL içerisinde bulunacak parametre sayının belirli olmadığı durumlarda nasıl bir yol izlemek gerekir? Böyle bir URL formatını sitemizin arama motoru için düşünebiliriz. Kullanıcılar bazen tek kelime aramak isteyebilirken bazen de 4-5 kelimeyi aratmak isteyebilirler. Örneğin Haber/Arama/seminer gibi bir arama yapılabileceği gibi Haber/Arama/seminer/asp.net/istanbul/mayıs gibi bir arama da yapabilir. Burada ilk iki kelime bizim için sabit, bunun dışındaki kelimeler ise değişken değerler olacaktır. İlk iki kelimeden sonra gelen kelimelerin sayısı belirli olmadığı için URL Routing'de belirli olmayan sayıdaki değerleri elde edebilmek için {*id} gibi bir kullanım gerçekleştirilebilir. id değeri URL'e yazılan diğer tüm kelimeleri tek bir string değer olarak getirecektir. Aşağıda bu tarz bir URL Routing ayarının nasıl yapılabileceği ve gelen değerlerin nasıl okunabileceği görülmektedir.

Global.asax
public static void RegisterRoutes(RouteCollection routes)

{

   ...

 

    routes.MapRoute(

        "HaberArama",

        "Haber/Arama/{*kelimeler}",

        new { controller = "Haber", action = "Arama" }

    );

}



Controllers/HaberController.cs
public class HaberController : Controller

{

    ...

 

    public ActionResult Arama(string kelimeler)

    {

        string metin = "";

        foreach (string kelime in kelimeler.Split('/'))

            metin += kelime + "<br/>";

        ViewData["deger"] = metin;

 

        return View();

    }
}

  

Aşağıdaki resimde arama URL formatımızın gayet güzel bir şekilde okunup içeriğindeki tüm kelimelerin yakalandığı görülebilir.


Resim: Haber/Arama/{*kelimeler} URL formatında ele alınan bir talep

25 Mayıs 2009 Pazartesi 12:49

Yorum - RSSYorumlar (1)

Kategori: ASP.NET

facebook'da Paylaş   twitter'da Paylaş   friendfeed'de Paylaş   del.icio.us'da Paylaş   stumpleupon'da Paylaş   Permalink

İzmir Ege Üniversitesi Seminerleri – ASP.NET 3.5, Dynamic Data ve MVC Sunumlarım

Bu hafta sonu İzmir’de Ege Üniversitesi’ndeyiz. 2 gün boyunca 7 farklı oturumda İzmirlilere dolu dolu bir içeriği sunacağız. Benim de ASP.NET MVC ile ASP.NET 3.5 ve Dynamic Data başlıkları ile iki oturumum olacak. Ege Üniversitesi Bilgisayar Mühendisliği Bölümü B4 Amfisinde gerçekleşecek olan bu etkinliğe İzmirli yazılımcı ve tasarımcıları bekliyoruz.

23 Mayıs Cumartesi
10.30-11.30 Yazılımda Kullanıcı Deneyimi Tasarımı
12.30-14.00 Expression Design ile Tasarım
14.15-16.00 ASP.NET MVC
16.15-17.15 WPF ve MultiTouch programlama

24 Mayıs Pazar
10.30-12.00 Silverlight 3.0 Yenilikleri
13.00-15.00 ASP.NET 3.5 ve Dynamic Data
15.30-17.30 RAD Dünyası!

Yer: Ege Üniversitesi Bilgisayar Mühendisliği Bölümü B4 Amfisi

Konuşmacılar: Sümeyra AKÇAY, Daron YÖNDEM, Uğur UMUTLUOĞLU

21 Mayıs 2009 Perşembe 08:56

Yorum - RSSYorumlar (0)

Kategori: Duyuru-Haber

facebook'da Paylaş   twitter'da Paylaş   friendfeed'de Paylaş   del.icio.us'da Paylaş   stumpleupon'da Paylaş   Permalink

nedirtv?com – Mayıs Ayı Webinerleri

nedirtv?com ekibi olarak bu ayda 6 farklı webinerle programımıza devam ediyoruz. Benim de 18 Mayıs 2009 Pazartesi günü ASP.NET MVC – URL Routing ile katkıda bulunacağım bu ayda SQL Server Integration Services, WCF, WF ve XNA Game Studio ile ilgili webinerler yer alıyor.

Webiner programını incelemek ve etkinliği facebook’taki takviminize kaydetmek için bu linki kullanabilirsiniz.

11 Mayıs 2009 Pazartesi 21:22

Yorum - RSSYorumlar (3)


facebook'da Paylaş   twitter'da Paylaş   friendfeed'de Paylaş   del.icio.us'da Paylaş   stumpleupon'da Paylaş   Permalink

nedirtv?com - Ankara Seminerleri

nedirtv?com, 3. yıldönümü etkinliklerine devam ediyor. 3 Mayıs 2009 Pazar günü Ankara Bilkent Üniversitesi’nde değerli Ankaralılarla beraber olacağız. INETA Türkiye ve Bilkent ACM Student Chapter desteğiyle gerçekleştireceğimiz bu tüm günlük etkinliğe tüm Ankaralı yazılımcıları bekliyoruz.

Not: Seminerlere katılım ücretsizdir.

Seminer Programı:
09:30 Açılış – nedirtv?com Tanıtımı
09:45 ASP.NET MVC (Uğur Umutluoğlu)
11:30 What is SharePoint? (Burak Batur)

13:00 Ara

14:00 WCF 4.0 & WF 4.0 (Burak Selim Şenyurt)
15:30 WPF ve Multitouch Development (Daron Yöndem)
17:00 Bitiş


Zaman:
3 Mayıs 2009 Pazar

Yer:
Merkez Kampüs Rektörlük Binası Mithat Çoruh Amfi Salonu, Bilkent Üniversitesi - ANKARA

27 Nisan 2009 Pazartesi 23:43

Yorum - RSSYorumlar (2)

Kategori: Duyuru-Haber

facebook'da Paylaş   twitter'da Paylaş   friendfeed'de Paylaş   del.icio.us'da Paylaş   stumpleupon'da Paylaş   Permalink

ASP.NET MVC - Kendi HTML Helper Metotlarımızla Çalışmak

Bu yazımıda kendi özel HTML Helper metotlarımızı nasıl oluşturup-kullanabileceğimize göz atacağız. HTML Helper metotları View nesneleri içerisinden Html adındaki bir nesne üzerinden çağrılabilen metotlardır. Örneğin <%=Html.TextBox("txtIsim", "Adınızı girin...") %> şeklindeki bir metot çağrımı sayfamızda txtIsim adında bir metin kutusu (text input elemanı) oluşturulmasını ve içerisinde Adınızı girin... metninin eklenmesini sağlar. Bu işlemi aslında biz de manuel html elementleri yazarak oluşturabiliriz, ancak bu kontrollerin içeriklerini dinamik şekilde oluşturmak için HTML Helper metotları işlerimizi basitleştirecektir. Bu doğrultuda eğer kendi yardımcı HTML metotlarımızı geliştirecek olursak farklı farklı projelerde kullanma ve geliştirme sürecini kısaltma şansımız da olacaktır.

Aslında burada oluşturacağımız metot neredeyse her projede yazdığımız tarzda sıradan bir metot olacaktır(1-2 ayrıntı dışında). Basit olarak geriye HTML kodları döndüren bir metot oluşturmak, aslında görevimiz bu! Tabi ki WebForm'larda bu tarz ihtiyaçlarımız olmadığı için biraz bu tip metotları yazmaya uzak kaldığımızı söyleyebiliriz. Bir de oluşturulması oldukça karmaşık olan veri kontrollerinin HTML çıktılarını ayarlamak, gerekli iş mantığını bu metotlar içerisinde kodlamak oldukça zahmetli bir işlem olacaktır. Biz yazımızda öncelikli olarak basit bir HTML helper metodunu nasıl oluşturabileceğimizi, ardından da veri saklayan bir nesneyi html table elementi olarak çıktıya nasıl dönüştürebileceğimizi göreceğiz.

HTML helper metotlarını doğrudan kendi yazdığımız özel bir sınıf içerisinde oluşturabiliriz. Burada nesneyi örnekleme ihtiyacımız olmayacağı için static bir metot oluşturmak daha doğru bir pratik olacaktır. Aşağıda html span elementi oluşturan bir yardımcı html metodu yer alıyor. Projemize HtmlHelperKutuphanem.cs adında bir class dosyası ekliyoruz.

HtmlHelperKutuphanem.cs

public class HtmlHelperKutuphanem

{

    public static string Metin(string text, string renk)

    {

        return string.Format("<span style=\"color:{0}\">{1}</span>", renk, text);

    }

}

Görüldüğü gibi son derece basit bir metot. Kendisine gönderilen text parametresinin içeriğini, renk parametresinde belirtilen renk kodu ile bir span elementi içerisinde görüntüleyecektir. Metodu View nesnelerimizden çağırma işlemi de aşağıda görüldüğü gibi olacaktır.

Views/Home/Index.aspx

<%=HtmlHelperKutuphanem.Metin("Merhaba Dünya", "#FF0000") %>

Sayfanın çıktısına baktığımızda ise;

<span style="color:#FF0000">Merhaba Dünya</span>

şeklinde olacağını göreceğiz. Bunu zaten bizde normal HTML kodlarını yazarak yapabiliriz dediğinizi duyar gibiyim, ama işin şu kısmını unutmamak lazım; kod içerisinde dinamik işlem yapmak istediğiniz durumlarda for-foreach gibi döngülerin içinde HTML kodunu string olarak yazmaktansa, bir programlama öğesi olan metotları kullanmak daha hızlı, daha basit ve  etkili olacaktır. Dikkat ettiyseniz burada yazdığımız yardımcı HTML metodumuz kendi özel class'ımız içerisinde olduğu için, metodu çağırırken de bu class adını kullanmak zorunda kaldık. Ancak ASP.NET MVC'deki tüm HTML Helper metotlara Html adındaki bir özellik(property) üzerinden erişilebilir. Bu özellik aslında o anki context üzerinden HtmlHelper tipinden bir nesne döndürmektedir.  O zaman yazacağımız özel metotlarımızı HtmlHelper class'ının  bir üyesi olarak getirmek işi standartlaştırmak adına faydalı olacaktır. Aşağıdaki kod parçasında az önce yazdığımız Metin adındaki metodun nasıl HtmlHelper class'ına uzantı bir metot olarak eklendiği görülmektedir. İşte extension metotların kullanımına süper bir örnek :)

HtmlHelperExtensions.cs

using System.Web.Mvc;

 

public static class HtmlHelperExtensions

{

    public static string Metin(this HtmlHelper htmlHelper, string text, string renk)

    {

        return string.Format("<span style=\"color:{0}\">{1}</span>", renk, text);

    }

}

Böylece artık Html özelliği üzerinden Metin adındaki yardımcı HTML metodumuzu çağırabileceğiz.
Basit bir HTML Helper

Bu basit metotla nasıl kendi HTML Helper metotlarımızı oluşturup kullanabileceğimizi gördük. Peki biraz daha karmaşık yapısı olan bir HTML çıktıları nasıl oluşturabiliriz? Aklımız hemen WebForm'lardaki GridView vb. kontrollerde olduğu gibi HTML çıktıları oluşturmaya gidiyor olabilir ama bu o kadar da kolay olmayacaktır. O zaman bizde elimizde bulunan bir liste koleksiyonun içeriğini table elementi olarak oluşturan bir yardımcı metodu nasıl oluşturabileceğimize bakalım. Dilerseniz ilk olarak basit bir table oluşturmayı deneyip, ardından daha karmaşık yapıdaki nesneleri nasıl table içerisinde listeletebiliriz bunun yollarını arayalım. İlk senaryomuz string dizisi içerisinde saklanan bilgileri tek hücreli bir tabloya yazdırmak olsun. Aşağıda bu işlemi gerçekleştiren SimpleTable adındaki extension method'umuz yer almaktadır.

HtmlHelperExtensions.cs

using System.Web.Mvc;

using System.Text;

 

public static class HtmlHelperExtensions

{

    public static string Metin(this HtmlHelper htmlHelper, string text, string renk)

    {

        return string.Format("<span style=\"color:{0}\">{1}</span>", renk, text);

    }

 

    public static string SimpleTable(this HtmlHelper htmlHelper, string[] list)

    {

        StringBuilder tablo = new StringBuilder();

        tablo.AppendLine("<table>");

 

        //Dizi içerisindeki tüm elemanları tek tek okuyarak bir satır ve sütun olarak oluşturuyoruz

        foreach (string item in list)

        {

            tablo.Append("<tr><td>");

            tablo.Append(item);

            tablo.AppendLine("</td></tr>");

        }

        tablo.Append("</table>");

 

        return tablo.ToString();//Oluşan HTML kodları geri döndürüyoruz

    }

}

SimpleTable metodu çok basit bir şekilde kendisine gönderilen list adındaki string dizisi içerisindeki elemanları bir döngü içerisinde tek tek okuyarak tabloya eklenen satır ve hücreler içerisine ekliyor. Oluşan tablonun HTML kodlarını da geriye döndürüyor. İş mantığı normal uygulamalarda yazdığımız gibi, olayın sadeliği ise bu metodu artık Html nesnesi üzerinden tekrar tekrar farklı View nesneleri içerisinde kullanabilmemizden geliyor.

Peki HTML çıktıyı biraz daha karmaşık hale getirelim. Senaryomuz şu olsun; elimizde içerisinde aynı tipten nesneler saklayan generic bir liste koleksiyonumuz olsun, ve biz de bu koleksiyondaki tüm nesnelerin özelliklerini table elementi içerisine birer hücre olarak yazdıralım. Örneğin kendi oluşturduğumuz Product tipindeki nesneleri saklayan generic List koleksiyonumuzun içeriğindeki tüm ürünleri ve ürünlerin detaylarını(yani property değerlerini) tablo içerisinde görüntülemek istiyoruz. Tahmin edeceğiniz üzere oluşturacağımız metot Product gibi bir tipe bağımlı kalmayacak, bazen Customer, bazen Order gibi farklı nesneleri de görüntülemek isteyecektir. Bu doğrultuda metodun içerisinde çalışma zamanında(runtime) liste içerisindeki tipin yapısını çözümlemek ve property değerlerine göre tablo hücrelerini oluşturmamız gerekecektir. Yani burada reflection(yansıma) tiplerine ihtiyaç duyacağız. Geliştireceğimiz metot aşağıdaki gibi olacaktır. Yapılan işlemlerle ilgili kısa açıklamalar kod içerisindeki yorum satırlarında yer alıyor.

HtmlHelperExtensions.cs
using System.Web.Mvc;

using System.Text;

using System.Collections;

using System.Reflection;

 

public static class HtmlHelperExtensions

{

    ...

 

    public static string Table(this HtmlHelper htmlHelper, IList list, bool showHeader)

    {

        //Eğer liste boş ise boş bir string döndür

        if (list.Count == 0)

            return string.Empty;

 

        StringBuilder tablo = new StringBuilder();

        tablo.AppendLine("<table>");

        //Tabloda başlık görüntülensin isteniyorsa ilk satırımız property'lerin isimleri olacaktır.

        //Bu doğrultuda koleksiyonun ilk satırındeki nesnenin property bilgilerine bakarak başlık satırı oluşturuluyor

        if (showHeader)

        {

            object firstItem = list[0];

            tablo.Append("<tr>");

            //GetType metodu bir nesnenin type bilgisini getirir.

            //Bu değer üzerinden GetProperties metodu ile nesnenin property listesine erişilebilir

            foreach (PropertyInfo property in firstItem.GetType().GetProperties())

            {

                tablo.Append("<td>");

                tablo.Append(property.Name); //Property'nin adı

                tablo.Append("</td>");

            }

            tablo.AppendLine("</tr>");

        }

 

        foreach (object item in list) //Liste içerisindeki nesnelerin özelliklerini satır satır oluştur

        {

            tablo.Append("<tr>");

            foreach (PropertyInfo property in item.GetType().GetProperties())

            {

                tablo.Append("<td>");

                tablo.Append(property.GetValue(item, null).ToString()); //GetValue metodu property'deki değeri getirir

                tablo.Append("</td>");

            }

            tablo.AppendLine("</tr>");

        }

        tablo.AppendLine("</table>");

 

        return tablo.ToString(); //Oluşan HTML kodları geri döndür

    }

}

Yardımcı HTML metodumuzu oluşturduk. Etkin şekilde kullanımını incelemek için öncelikli olarak kendimize Product adında bir class oluşturup, ardından da bir List koleksiyonu için Index.aspx adındaki View nesnemizden bu metodu çağıralım. Aşağıda Product adındaki class'ımız ve Views/Home/Index.aspx dosyasına eklediğimiz kodlar yer almaktadır.

Product.cs
public class Product

{

    //Burada C# 3.0 ile gelen auto implemented property özelliğini kullanıyoruz.

    //Yani field ve get-set bloklarının gövdelerini oluşturmadan property tanımlıyoruz.

    public int Id

    {

        get; set;

    }

    public string Name

    {

        get; set;

    }

    public double Price

    {

        get; set;

    }

}

 

Views/Home/Index.aspx
<%

    List<Product> urunListe = new List<Product>{

                                new Product { Id=2, Name="Kalem", Price=1.25},

                                new Product { Id=4, Name="Defter", Price=3.49},

                                new Product { Id=5, Name="Çanta", Price=19.25}

                                };

    Response.Write(Html.Table(urunListe,true));

%>

View'ı görüntülediğimizde aşağıdaki gibi bir çıktıyı görebiliriz.

Table çıktısı üreten HTML Helper

Gördüğünüz gibi hazırlayacağımız yardımcı HTML metotlarını Html özelliği içerisinde saklayarak MVC projelerimizde daha kolay HTML çıktılar oluşturabilmekteyiz. Şu an için MVC uygulamalarında kullanabileceğimiz herhangi bir sunucu kontrolü bulunmamaktadır, ancak yakın gelecekte bazı temel kontrollerin bu ortama dahil edilmesi planlanmakta. Bu süreçte MVC uygulamaları için kendi HTML Helper metotlarımızı üreterek sunucu kontrollerinin olmamasından ortaya çıkan dezavantajı giderebiliriz.

23 Nisan 2009 Perşembe 18:41

Yorum - RSSYorumlar (0)

Kategori: ASP.NET

facebook'da Paylaş   twitter'da Paylaş   friendfeed'de Paylaş   del.icio.us'da Paylaş   stumpleupon'da Paylaş   Permalink

nedirtv?com Nisan Ayı Webinerleri

Yoğunluktan dolayı bu ayki webinerlerin duyurusunu ancak yapabiliyorum. Webinerlere bu ayda tüm hızıyla devam ediyoruz. Programımız yine oldukça yoğun ve yine ilk kez değineceğimiz konular fazlasıyla var; Silverlight 3.0 Beta, ASP.NET MVC ve SQL Data Services gibi… Ben de 27 Nisan’da ASP.NET MVC Framework’e Giriş webineri ile bu aya katkıda bulunuyorum.

Detaylı programave webiner bilgilerine bu linkten ulaşabilir, bu linkten de Facebook’taki olayı takviminize kaydedebilirsiniz.

16 Nisan 2009 Perşembe 09:02

Yorum - RSSYorumlar (0)

Kategori: Duyuru-Haber

facebook'da Paylaş   twitter'da Paylaş   friendfeed'de Paylaş   del.icio.us'da Paylaş   stumpleupon'da Paylaş   Permalink

Bağlantılar



Takip Et

RSS Feed twitter friendfeed

Seminer/Webiner Programım

  • Seminer-WebinerASP.NET 4.0 WebForms Yenilikleri (Microsoft İstanbul Ofisi)
    29 Mayıs 2010

  • Seminer-WebinerVisual Studio 2010 Yenilikleri (Osmangazi Üniversitesi)
    15 Mayıs 2010

  • Seminer-WebinerASP.NET AJAX ile Zengin Internet Uygulamaları Geliştirme (Microsoft İstanbul Ofisi)
    3 Mayıs 2010

>> Etkinlik Takvimi