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 :)
Etiket: masterpage
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>
ASP.NET ile Login, MasterPage ve RequiredFieldValidator Kullanımı
Merhabalar, ASP.NET ile kullanıcı girişi olayını veritabanına bağlantılı bir şekilde nasıl yapabilirizi anlatmaya çalışacağım. Anlatacağım mekanızmada .Net ile birlikte gelen Login nesnelerini kullanacağız. Nedeni ise güvenlik ve işlevsellik. Özellikle giriş işlemlerinde, kullanıcıyı bir önceki sayfaya yönlendirmek tam bir kabus ! Kabus derken yanlış anlaşılmasın, birazcık kod yazmak gerektirir manasında :) ASP.Net ile yapılmış sitelerde şunu illaki görmüşsünüzdür. Bir sayfa kullanıcı girişi gerektirmektedir, kullanıcı adınız ve şifrenizi yazdığınızda, eğer bilgileriniz doğru iste geldiğiniz sayfaya yönlendirilirsiniz. Bu noktada adres satırında “?ReturnUrl=Default.aspx” gibisinden bir önceki sayfanın adresi görünür. Bunu kendimiz kodlayarakta yapabiliriz fakat ASP.NET’ de hazır yapılmışı zaten var :)
Öncelikle bu adresteki videoları kesinlikle izlemenizi tavsiye ederim. Bende ordan izledim :D
Sadece püf noktalarına değineceğim, mevcut dosyaları buradan indirebilirsiniz.
Varsayılan olarak web.config dosyamızdaki authentication mode windows dur. (<authentication mode=”Windows” />) öncelikle bu satırı <authentication mode=”Forms” /> olarak değiştiriyoruz. Varsayılan olarak giriş formumuzu Login.aspx sayfasına yönlendirir, eğer biz farklı bir dosya veya klasöre yönlendirme yapmak istersek bunun için altına şu düğümü eklememiz gerekiyor. Ben Login adında bir klasörün içerisine yönlendiriyorum.
<authentication mode="Forms">
<forms loginUrl="~/Login/"/>
</authentication>
LoginView Nesnesine bir göz atalım.
<asp:LoginView ID="LoginView1" runat="server">
AnonymousTemplate : Kullanıcı sisteme giriş yapmamış ise görüntülenecek olan kısım.
<AnonymousTemplate>
Kimsin sen ?
</AnonymousTemplate>
<LoggedInTemplate>
Hobaaaaa <asp:LoginName runat="server" ID="LoginName1" />
</LoggedInTemplate>
</asp:LoginView>
<asp:LoginStatus ID="LoginStatus1" runat="server" LogoutPageUrl="~/Login/Exit.aspx" LogoutAction="Redirect" />
LoggedInTemplate : Kullanıcı giriş yapmış ise görüntülenecek olan kısım.
LoginName : Adı üzerinde login olan kullanıcının adı veya görüntülenmesini istediğiniz bilgisi.
LoginStatus : Eğer kullanıcı giriş yapmış ise Çıkış (Logout), eğer kullanıcı giriş yapmamış ise Giriş (Login) ibaresi görüntülenecek olan kısımdır. Bu nesnedeki LogoutPageUrl özelliği çıkış butonuna tıklanıldığında gidilecek olan sayfayı, LogoutAction ise çıkış butonuna tıklanıldığında yapılmasını istediğimiz işlemi belirtiyoruz.
MasterPage.master adındaki meşhur MasterPage‘ miz. Yani sitemizin ana şablonu ! Eğer dosyaları incelerseniz çok basit birşey olduğunu görürsünüz. Bu mekanızma sayesinde tasarım işimiz çok çok rahat bir şekilde ilerliyor.
Validation nesneleri ile formların doldurulma koşullalarını belirleyebiliyoruz. Yani şu id ye sahip alanın içine sadece rakam girilsin, yada o alan boş bırakılamasın vb.. koşulları oluşturmamıza olanak sağlıyor. Normalde JavaScript ile bu işlemi yapıyor ve gidip asp yada php kodlarımızın bulunduğu yerlerde aynı koşulları sağlamamız gerekiyorduki kaçak olmasın fakat Validation nesneleri kod kısmında da karşılaştırma yaptığı için hem çok daha güvenli hemde çok daha kullanışlı. Bir bu örneğimizde RequiredFieldValidator’ u kullandık. Buradan diğer validation nesneleri hakkında bilgi alabilirsiniz.
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="kullaniciadi"
ErrorMessage="Kullanıcı Adını Boş Bıraktınız.!">
</asp:RequiredFieldValidator>
Kullanımı çok basit hemen yukarıdaki örnekteki özelliklere göz atalım.
ControlToValidate = Hangi form alanının kontrol edileceğini belittiğimiz etiketimiz. Forum alanın ID sini buraya giriyoruz.
ErrorMessage= Adı üstünde, hata olduğunda çıkacak uyarıyı giriyoruz.
Bu kadar basit arkadaşlar, abartısız 3 dakikada basit ve güvenilir bir Kullanıcı Girişi (Login) yapabilirsiniz.
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 hakkında çok daha ayrıntılı bilgilere buralardan ulaşabilirsiniz..
http://www.nedirtv.com/etiket/MasterPage.aspx