Razor View Engine püf noktaları

Adı üstünde Razor (ustura) ! kodlarımızı hızlıca yazıp geçiyoruz. Uzun zamandır mvc3 ile geliştirdiğim bir projeyle uğraşıyorum haliyle razor ile kodlarımı yazıyorum. Geçen gün web forms ile geliştirdiğim bir projeye bazı özellikler eklemem gerekti, aman Allah’ ım <% %> bunlardan aç kapat aç kapat iflahım söküldü meğer razor candan da öteymiş bunu bir kez daha anladım. Bu yazıda anlatacaklarımın  hepsini Scottgu abimizin bloğundan öğrendiğimide söylemek istiyorum :) Düşünüyorumda yazacaklarımla başlık biraz alakasız gibi oldu ama idare edin :)

Okumaya devam et Razor View Engine püf noktaları

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>

MasterPage’ den diğer sayfadaki bir nesneye erişmek. FindControl

Geçtiğimiz haftalarda apostylee.com un .Net versiyonunu sizlere duyurmuştum. Header kısmındaki arama kutusuna girilen değeri veritabanında aratıp sonucu default.aspx sayfamdaki DataList te göstermek istediğimde, direk dataliste erişemediğimi farkettim. Halbuki windows form da nesnenin özelliklerine girip Modifiers kısmından Private değerini Public ile değiştirdiğimizde erişebiliyorduk. Web Form da durum biraz daha farklı ! Belki başka bir yoluda fakat benim bildiğim ve incelediğim kadarıyla herkesin kullandığı yöntem FindControl. Esasında Javascript deki getElementById ifadesine benziyor. Adından da anlaşılacağı gibi kontrolü arayıp bulmaya yarıyor :) Sadece sayfalar arasında değil nesne içindeki nesneyede bu sayede erişebiliyoruz. Örneğin bir GridList imiz var ve içinde de TextBox ımız. Textboxa erişmek için bu yöntemi kullanabiliyoruz. Yani öğrenilmesi anlanması gereken bir konu.

Kullanımı bir örnekle görelim;

		//Normalde bu datalist default.aspx sayfasında, bu kodlar ise MasterPage.Master.cs sayfamızda.
		//dl adındaki değişkene; ContentPlaceHolder1 içinde bulunan Datalist1 adındaki DataList nesnesini buluyoruz.
        DataList dl = ((DataList)ContentPlaceHolder1.FindControl("DataList1"));
        dl.DataSource = ds; // Data Sourcesini belirliyoruz veya ne istiyorsak..
        dl.DataBind();

		// Yine default.aspx sayfasında bulunan sayfalama adındaki Label Nesnesini görünmez yapıyoruz.
       ((Label)ContentPlaceHolder1.FindControl("sayfalama")).Visible = false;

JavaScript teki getElementById metodunda direk id yi bulup işlem yapabiliyoruz fakat; burada ilk önce aranan nesnenin ne olduğunu belirtmemiz gerekiyor. C# adı üstünde nesne tabanlı bir yazılım dili. Umarım faydalı olmuştur. Bir sonraki .Net macerasında görüşmek üzere..

ASP.NET MasterPage

ASP den ASP.Net’ e geçiş sürecinde beni en çok MasterPage olayı şaşırttı. Gerçekten süper düşünülmüş. Kabaca MasterPage için sitemizin şablonu diyebiliriz. ASP ile sitemizin tasarımını sabit tutmak için genellikle include file yöntemini kullanıyorduk. MasterPage yi gördükten sonra bu işin hamallıktan başka bişiy olmadığını gördüm. Heleki aradan zaman geçtikten sonra araki hangi sayfa nerde bulasın :) MasterPage ler .master uzantısında oluyor ve kodlama kısmı içinde .master.cs şeklinde oluşturuluyor. Oluşturuluyor diyorum Visual Studio kullanıyorsanız ve yeni MasterPage ekle derseniz otomatik olarak bu dosyalar oluşuyor. Örneğin; sitemizin üst (header) , alt (footer) ve menü kısmını MasterPage mizde tasarlıyoruz, değişken olan kısımımız  etiketleri arasında yer alıyor, birden fazla ContentPlaceHolder kullanmamız mümkün. Biraz karışıkmış gibi geliyor biliyorum, belkide ben karıştırdım. Eğer uygulamaya geçip bir deneme yaparsanız olayın çok zevkli ve kolay olduğunu anlayacaksınız. Hatta sırf bu olay için .Net e geçmek isteyenler bile olacaktır. Kabaca MasterPage ye değinmeye çalıştım, öğrendikçe daha detaylı yazılarla görüşmek üzere..

MasterPage.Master

Default.aspx

MasterPage hakkında çok daha ayrıntılı bilgilere buralardan ulaşabilirsiniz..

http://www.nedirtv.com/etiket/MasterPage.aspx

http://www.csharpnedir.com/makalegoster.asp?MId=354

http://www.kariyervideo.com/VideoAciklama.asp?id=347