Duyuru – ASP.NET MVC 3 Semineri

Saat değişikliği !

13 Mayıs Cuma günü 13:00 – 14:30 saatleri arasında K.T.Ü Bilgisayar Mühendisliği – Halis Duman Amfisi‘ nde uygulamalı olarak Asp.Net Mvc3 semineri vereceğim. Gündem şu şekilde olacak.

  • MVC Nedir ?
    • Model
      • Ado.Net Entity Framework
      • Validation İşlemleri
      • Sql Server Compact
    • View
      • Razor View Engine
      • Html, Css
      • Jquery
    • Controller
      • Scaffolding
  • Neden MVC ?

Facebook etkinlik sayfasına buradan ulaşabilirsiniz. Gelemeyen arkadaşlar için videoya çekip buradan paylaşacağım, umarım bir aksilik olmaz :)

Mvc ile jQuery Template Kullanımına Giriş – Video

Geçtiğimiz günlerde jQuery Template hakkında detaylı bir yazı yazmıştım. Bu videoda template olayını mvc ile birlikte kullanıp bilgilerimizi pekiştiriyoruz. Mvc kontrolümüzden gelen json veriyle işlemlerimizi yaptığımız bu videoda, templatenin artılarınada değiniyoruz.

Videoyu daha kaliteli izlemek için buradan indirebilirsiniz.

Konuyla ilgili adresler;

  1. http://weblogs.asp.net/hajan/archive/2010/12/15/jquery-templates-with-asp-net-mvc.aspx
  2. http://weblogs.asp.net/hajan/archive/2010/12/13/jquery-templates-tmpl-tmplitem-and-template.aspx
  3. http://weblogs.asp.net/hajan/archive/2010/12/13/jquery-templates-in-asp-net-introduction.aspx
  4. http://api.jquery.com/jQuery.template/
  5. http://stephenwalther.com/blog/archive/2010/11/30/an-introduction-to-jquery-templates.aspx

Projeyi buradan, videoyu buradan indirebilirsiniz.

Mvc projesinde jQuery Ajax Kullanımı – Video

Mvc projemizde jQuery ajaxı kullanarak, bir içeriğin altına yorum ekleme ve silme işlemini gerçekleştireceğiz. Bu işlemin bize kazandırdıklarını, mvc ile uygulama geliştirmenin bize kattıklarınıda anlamaya çalışacağız. Umarım faydalı olur.

Videoyu daha kaliteli izlemek için buradan indirebilirsiniz.

Projeyi buradan, videoyu buradan indirebilirsiniz.

Mvc Scaffolding’ e Giriş – Video

Scaffolding ile çok hızlı ve kontrollü bir biçimde proje geliştirebilirsiniz. Video da anlattıklarımı burada ki kaynaktan öğrendim, zaten Steve Sanderson abimizin aleti bu :) Takip etmenizide öneririm. Aklıma gelmişken videoda veritabanın scaffolding tarafından oluşturulduğunu söylüyorum fakat bu yanlış, veritabanını entity framework oluşturuyor ;) Video da bir önceki video olarak bahsettiğim videoya Ado.Net Code – First (Ctp5) – Video adresinden ulaşabilirsiniz. Günlüğümde scaffolding ile ilgili diğer yazılara buradan ve buradan ulaşabilirsiniz.

Steve Sanderson‘ unun burada ki ve MIXX 11de ki videosunu izlemenizi şiddetle tavsiye ederim.

Video çekme olayını çok seviyorum fakat beni çok yoruyor. Kendi başınıza ekrana bakarak bir şeyler anlatmaya çalışıyorsunuz. Çoğu zaman aynı şeyleri defalarca tekrar ediyorsunuz, bu da konsantrenizin tamamen bozulmasına sebep oluyor. Sınavlarda bildiğinizi unutmak durumuna bile kalıyorsunuz, en azından ben kalıyorum :) Umarım konuyu anlatabilmişimdir, hatalarım varsa affola :)

Projeyi buradan, videoyu buradan indirebilirsiniz.

Paket Yönetim Konsolu – Package Manager Console

Geçen ki yazımda paket yönetiminden bahsetmiştim. Şimdi paket yönetim konsolunun nasıl kullanıldığına bakalım. Unutmadan bu örneğimizde mvcScaffolding paketini yükleyeceğiz sebebi ilerleyen günlerde bu konu hakkında bir kaç yazı yazmak istememdendir :)

Öncelikle View / Other Windows / Package Manager Console ye tıklayıp konsolumuzu açıyoruz.

Okumaya devam et Paket Yönetim Konsolu – Package Manager Console

.Net Mvc cephesinde ki bazı gelişmeler.

Konu çok olunca böyle bir başlık yazmayı uygun gördüm. Son zamanlarda özellikle web tarafında bir Mvc ve Entity dir gidiyoruz. Gün geçmiyor ki yeni bir şey çıkmasın, haliyle ipin ucu kaçtığında neyin ne olduğunu anlamak bir hayli güçleşiyor ve içinden çıkılmaz bir hal alıyor. Bu gelişmeleri maddeler halinde dilimin döndüğünce paylaşmak istiyorum.

  1. Ado.Net Entity ile bir model oluşturup bu model üzerinde veritabanı işlemlerimizi gerçekleştiriyorduk. Entity ile varolan vt yi modelleye bildiğimiz gibi model den de vt yi oluşturabiliyorduk. Bu yaklaşım entitynin bir nevi başlangıç noktasıydı. Zaman ilerledikçe problemler de beraberinde geldi. En başta modelimizi otomatik oluşturduğu için müdehale etmek bir hayli zordu ve müdahale sonunda eğer modelimizde değişiklik yapılmışsa sonradan eklemelerimiz sıfırlanıyordu, çünkü kodlar yeniden oluşturuluyordu. Ayrıca çoğu zaman hiç kullanmayacağımız methodlar boşuna yük oluyordu. İşin birde doğrulama (validation) boyutu vardı ki takla üstüne takla atmak gerekiyordu. Modeli ben yazacam arkadaş, hakimiyet bizde olacak ! Modele hakim olamadığınız durumlarda başlarda güllük gülistanlık olan işlemler ilerde çok can sıkıcı ve içinden çıkılmaz durumlara yol açıyor. Allah’ tan code-first yaklaşımıyla bu isteklerimiz yerine geliyor. Modelimizi istediğimiz gibi yazabiliyoruz, doğrulama işlemlerini basitçe çözebiliyoruz ve tek hakim biz oluyoruz ama yine eksiklikler var, validation için ekstra classlar yazmamız gerekiyor. Şimdi elimizde 2 tane seçenek bulunuyor. Entity Data Model (edm) ve Code-First. Burada ki video da edm den kod oluşturucular (code generator) tarafından code-first bir modelin nasıl oluşturulup kullanıldığını anlatmaya çalışmıştım, yani emd yi kullanarak code-first modelimizi oluşturabiliyoruz. Diğer bir durum ise edm yi hiç işe katmayıp model sınıflarımızı yazıp veritabanımızı bu modelden oluşturmak. Bu seçenek kontrolün tamamıyla elimizde olduğu tek seçenek. Özetleyecek olursak Ado.Net bize şu yolları sunuyor, direk Edm kullanımı, edm den model oluşturma ve edm yi işe hiç katmadan direk modeli yazıp kullanmak.
  2. Paket yönetim konsulu (Package Manager Console) Son zamanlar da yine Microsoft cephesinin üzerinde epeyce durduğu bir konu paket yönetim konsolu. Amacı belli kaynaklardaki özellikle açık kaynak kodlu (open source) projeleri, kolaylıkla çalıştığımız projeye eklememize olanak sağlıyor. Örneğin projemize facebook connect yada x bir ekstra mekanızma (:D) eklemek istediğimizde arayıp bulmamıza gerek kalmadan bir komutla indirip projemize ekleyebiliyoruz. Temel komutlar burada güzel bir şekilde listelenmiş. Nuget projesi şu anda en büyük ve popüler açık kaynak paket deposu. Şu anda 907 adet paket hali hazırda kullanılmak için bekliyor. İndirilen paketler proje dosyalarının bir üst dizininde packages klasörünün içerisinde depolanıyor ve referans olarak projenize ekleniyor.
  3. mvcScaffolding Bu yapıyı yukarıda bahsettiğimiz paket yönetimini kullanarak mvc projenize ekleyip kullanabilirsiniz. Nedir bu scaffolding diye soracak olursanız Crud (Create, read, update ve delete) işlemlerini 1. maddede bahsettiğimiz modelimize uygun bir şekilde, gerekli olan yapıyı ve formları bizim yerimize otomatik olarak oluşturan açık kaynak bir araç. Steve abimiz konuyla ilgili tüm bilgileri blogunda anlaşılır bir şekilde paylaşıyor, ayrıca burada ki videosunu sonuna kadar izlemenizi şiddetle tavsiye ediyorum. Akıllıca tasarlanmış bir model üzerinden çok hızlı bir şekilde saat gibi işleyen projeler yapabilirsiniz.

Dipnot: .Net ile web projesi geliştirmek isteyen arkadaşlarımız var fakat nereden başlayacakları konusunda fikir sahibi değiller. Bunun en büyük sebebi .net tarafında iki türlü geliştirme şeklinin varlığı. Bir tarafta webForm diğer tarafta mvc. Mvc sadece .net de değil diğer web geliştirme ortamlarında da oldukça popüler bir tasarım deseni oldu. Benim konuyla ilgili fikrim direk mvc ile başlamaktan yana sebebi ise şu; webform da bir sürü kontrol bulunuyor ve bu kontrollerin bir sürü özellikleri bulunuyor. Kontrollerin çalışma mantığını anlamak, kullanım yerlerine ve şekillerine hakim olana kadar epeyce zamanınız geçer. Çoğu kişide hiç alışık olmadığı bu yapı karşısında pes eder ve bırakır. Mvc de ise html elemanları ile iş yapıldığından zaten önceden bir aşinalık söz konusudur. Örneğin; input, textarea, selectbox, form gibi.. Php, asp vb.. diğer dillerde nasıl kullanılıyorsa aynen burada da kullanabiliyorsunuz. Enerjinizin %90 lık kısmını model ve kontrol kısmına vermeniz durumunda öğrenilmesi ve kavranılması daha kolay gibi geliyor bana.. Özellikle mvc3 ile birlikte eksiklerin giderilmesi, yeni özelliklerin eklenmesiyle çok da zevkli bir uygulama geliştirme imkanınız oluyor. Günün sonunda bir tasarım desenine uygun uygulamada geliştirmiş oluyorsunuz.

MasterPage kullanımda kontrollerin ID mevzusu

Asp.Net de sayfamıza eklediğimiz her kontrolün bir id si bulunuyor. Javascript ile kontrollerimize erişmek istediğimizde bu id leri direk kullanabiliyoruz. Eğer masterpage kullanırsak işler biraz değişiyor. Sayfamız masterpage den türediği zaman kontrollerin idlerine bir ön ek geliyor. Bunu kod tarafında göremesekte sayfa yorumlandıktan sonra kaynak kodlarına baktığımızda id lerin değiştiğini görüyoruz. Haliyle jquery ile ilgili id deki elemanı seçmemiz için kod tarafında ki id değil, kullanıcı (client) tarafında ki id yi kullanmamız gerekiyor. Bu durumda İki şekilde problemimizi çözebiliyoruz. Birinci çözüm yolu kontrollerin ClientID özelliğini kullanmak. <%=kontrol.ClientID%> dediğimizde geriye dönen id bizim kontrolümüzün sayfa yorumlandıktan sonra oluşan değerdir. Fakat bu yöntemi .js sayfamızda kullanmamız söz konusu değil bu sebepten direk .js içerisine html de oluşan id yi yazarak kullanabiliyoruz. Şöylede bir durum var hiç uğraşmadan kontrollerimize class atayıp yukarıdaki olaylara bulaşmadan direk class adını yazarak seçip istediğimiz işlemleri aynen yapabiliriz. Burada ki tek nüans id yakalama performansı class a göre daha iyi fakat bunu küçük işlerde görmemiz çok zor ;) Neyse umarım konu anlaşılmıştır. Aşağıda bir örnek  bulunuyor, dilerseniz çalışan halini buradan indirebilirsiniz.

    <script type="text/javascript">
        jQuery(function($) {
            $("#<%=date.ClientID %>").mask("99/99/9999");
            $("#<%=phone.ClientID %>").mask("(999) 999-9999");
            $("#ctl00_ContentPlaceHolder1_tin").mask("99-9999999");
            $("#ctl00_ContentPlaceHolder1_ssn").mask("999-99-9999");
        });
    </script>

jQuery Template

Template kelimesini görünce akla hemen sitenin komple arayüzü geliyor fakat bu template tam olarak o template değil. Özetlemek gerekirse jSon veriyi istediğimiz kalıpta göstermemize olanak sağlayan ve html çıktısında kod tekrarını ortadan kaldıran bir yapı. Benide en çok kod tekrarını ortadan kaldırması cezbetti. Ne demek bu ? Örneğin; kod tarafında bir döngüyle ekrana 20 satır kayıt basıyoruz ve bu 20 satır kayıt için her seferinde div ul li gibi etiketlerle biçimlendirdiğimizden 20*html etiketi oluyor. Eklentinin ana sayfasına buradan ulaşabilirsiniz.

. Okumaya devam et jQuery Template

Asp.net ile çok dilli uygulama geliştirme.

Günümüzde çoklu dil (multi language) giderek önem kazanıyor. Bunun en büyük sebebi, projelerin artık ülke bazlı düşünülmüyor olması. Eskiden 2 dil bile fazla gelirken şimdilerde kullanıcı eğilimine göre bu sayı artabiliyor. Çoklu dil yapısı için bir sürü yöntem bulunuyor. Örneğin; xml, veritabanı, resource kullanmak vb.. Biz bu yazımızda resource ile çoklu dilli uygulama nasıl geliştirilir buna bakacağız.

Öncelikle mevcut bir sayfamızı kolay bir şekilde nasıl çoklu dile çeviririz buna bakacağız. Ben örnek olarak küçük bir form hazırladım.

Formumuz da textbox, dropdownlist, label, button ve validator kontrollerimiz bulunuyor. Eğer elle bu forma daha doğrusu sayfaya girişip tek tek elle değişkenleri tanımlamaya kalkarsak epey bir zamanımızı alır. Visual studio geliştiricileride böyle düşünmüşler ki bizi yormamak için Tools menüsünün altına Generate Local Resource özelliğini koymuşlar. Unutmadan bu menü sadece tasarım kısmındayken çıkıyor. Buraya tıkladığımızda bizim yerimize resource dosyası oluşturuluyor ve gerekli değişiklikler sayfamızda yapılıyor. Kaynak dosyamız App_LocalResources klasörünün altında sayfaAdi.aspx.resx şeklinde bulunuyor. Okumaya devam et Asp.net ile çok dilli uygulama geliştirme.

Takip ettiğim yabancı .Net blogları..

En aktif bloglar;

ScottGu’s BlogScott http://weblogs.asp.net/scottgu/default.aspx
Gil Fink on .Net http://blogs.microsoft.co.il/blogs/gilf/
Scott Hanselman http://www.hanselman.com/blog/
Articles on .NET Technologies http://www.dotnetcurry.com/BrowseArticles.aspx
ADO.NET team blog http://blogs.msdn.com/b/adonet/

Az aktif bloglar;

The C#rypt | About C# and other silly things http://blog.zoolutions.se/
Stephen Walther on ASP.NET http://stephenwalther.com/blog/Default.aspx
Moses’ Blog | Living {.net} lifestyle http://mosesofegypt.net/
Don’t Be Iffy http://thedatafarm.com/blog/
Wriju BLOG http://blogs.msdn.com/b/wriju/
Fredrik Normén http://weblogs.asp.net/fredriknormen/default.aspx


Google reader kullanıyorsanız buyurun ;) google-reader-subscriptions

Eğer bildiğiniz takip edilesi güzel bloglar varsa lütfen yorum olarak ekleyiniz :)

jQueryUi AutoComplete kullanımı

Uzun zaman önce jQuery eklentisi olan Autocomplete ile birlikte nasıl bu işi yaptığımızı yazmıştım. Bu sefer jQueryUi ye eklenen bu özelliğin nasıl kullanıldığını anlatmaya çalışacağım. Jqueryui ile birlikte gelen autocomplete de bir çok özellik bulunuyor. Tüm özellikleri kolayca kullanabiliyor ve istediğiniz gibi şekillendire biliyorsunuz. Ben bu örnekte temel olarak arama işlemini anlatacağım, eklentinin sayfasından diğer özelliklerine bakıp kendinize göre geliştirmeler yapabilirsiniz. Hemen default.aspx sayfamızdan başlayalım;

    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/jquery-ui.min.js" type="text/javascript"></script>
    <link href="ui-Themes/ui-lightness/jquery-ui-1.8.2.custom.css" rel="stylesheet" type="text/css" />
    <script>
        $(function() {
            $("#deger").autocomplete({
                source: "Search.ashx",
                minLength: 1,
                select: function(event, ui) {
                    alert(ui.item.id +" / "+ ui.item.value);
                }
            });
        });
	</script>

        <div class="demo">
            <div class="ui-widget">
	            <label for="deger">Bir değer girin: </label>
	            <input id="deger" size="50" />
            </div>
        </div>

Yukarıda ki kodda anlatılacak çok fazla bir şey bulunmuyor. Jquery kütüphanelerimizi yüklüyoruz, sonrasında değer girilecek input umuzun id sini yakalayıp autocomplete özelliğini ekliyoruz. Source ye dinamik olarak aramanın yapılacağı sayfamızın adresini veriyoruz. minLenght değeri ise kaç karakterden sonra aramaya başlanması gerektiğini ifade ediyor. 3 yazarsak 3. karakterle birlikte arama işlemi başlayacaktı. Select kısmında ise veri seçildiğinde ne olacağını fonksiyon olarak tanımlıyoruz. Bu örnekte gelen verinin değerini ve id sini alert ile ekrana basıyoruz.

Search.ashx (arama işleminin gerçekleştiği sayfamız.)

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "application/json";
            string strJsonTemplate = "\"id\":{0},\"value\":\"{1}\"";
            string strParam = context.Request.QueryString["term"];

            StringBuilder sb = new StringBuilder();
            Dictionary<int, string> d = veriler();
            sb.Append("[");
            foreach (KeyValuePair<int, string> item in d.Where(v => v.Value.Contains(strParam)))
            {
                sb.Append("{" + string.Format(strJsonTemplate, item.Key, item.Value) + "},");
            }
            sb.Append("]");

            context.Response.Write(sb.ToString().Replace(",]", "]")); //sonda kalan virgülü kaldırıyoruz.
        }

        public Dictionary<int,string> veriler()
        {
            Dictionary<int, string> d = new Dictionary<int, string>();
            d.Add(1, "javascript");
            d.Add(2, "asp.net");
            d.Add(3, "csharp");
            d.Add(4, "php");
            d.Add(5, "java");
            d.Add(6, "jquery");
            d.Add(7, "html");
            d.Add(8, "css");
            d.Add(9, "mssql");
            d.Add(10, "mysql");
            d.Add(11, "visual studio");
            d.Add(12, "net beans");
            return d;
        }

Bur örnekte Dictionary içerisine elle eklediğim veriler içerisinde arama işlemi yaptım. Siz bu kısmı istediğiniz gibi düzenleyip veritabanınızda arama işlemini kolayca yaptırabilirsiniz. Bu sayfada ekstradan yaptığımız tek olay veriyi jSon veri türüne çevirmek. Arama işlemini QueryString ile birlikte gelen term bilgisini kullanıyoruz. Sonrasında basit bir foreach ve bilgileri ekrana yazdırıyoruz.

Basit bir jSon verisi;

[{"id":1,"value":"javascript"},{"id":5,"value":"java"}]

Gördüğünüz gibi çok basit ve kullanışlı bir şekilde otomatik tamamlama işlemini yaptık. İlgili projeyi buradan indirebilirsiniz. Hepinize güzel ve sağlıklı günler, hoşça kalın..

Ado.Net Code – First (Ctp5) – Video

Bu videoda Code-First yapısına ve modelimizin doğrulama (validation) işleminin nasıl gerçekleştirildiğine, hem kullanıcı hemde sunucu tarafında bakacağız. Bunların yanında Entity Data Model den veritabanımıza tablolarımızı oluşturup, ilişkilerine inceden bakacağız. Umarım faydalı bir video olur.

Örneği buradan indirebilirsiniz.

Ado.Net Code-First CTP 5 Download

Kaynaklar;

http://weblogs.asp.net/scottgu/archive/2010/12/08/announcing-entity-framework-code-first-ctp5-release.aspx
http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx
http://blogs.msdn.com/b/adonet/


İlgili diğer videolar;

Ado.Net Entity framework’ e giriş – Video
Mvc ye giriş – Video