Çarşamba, Eylül 30, 2009

Asp.Net MVC Framework - OutputCache Kullanımı ve Dinamik İçerik Görüntüleme

Asp.Net MVC Framework ile geliştirilen uygulamaların performanslarının arttırılması için bir ön bellekleme kullanılması en çok tercih edilen yöntemlerden biridir. Web sayfalarının görüntülenmesi esnasında benzer veriler görüntülenecekse bu sayfaların önbellekte tutulması sayfa görüntüleme performansını arttıracak. Ana sayfada görüntülenen bir veriyi önbellekleme kullanarak diğer kullanıcılar içinde hızlıca açılabilmesine olanak tanırız. Bu konu hakkında kafanıza takılan konular var ise OutputCache Kullanımı ve Performans başlıklı bir önceki yazımızı okuyabilirsiniz.

Ön bellek kullanarak benzer verileri bellekte tutulması yöntemi ile bir çok kullanıcıya hızlı bir şekilde gösterebiliriz. Evet performans açısında başarılı bir çözüm ancak bu kullanımda kesinlikle dikkat edilmesi gereken bir nokta var. Web sayfası üzerinde yer alan dinamik içerikler. Bu tür sayfalarda 4-5 adet reklam rastgele bir şekilde sayfayı açan kullanıcılara gösterilecektir. Eğer ki bizler bütün sayfayı önbelleğe aldırırsak sayfa her yenilendiğinde kullanıcı aynı reklamı görmeye devam edecektir. Bu durumda web sitelerinin reklamlar üzerinden gelir elde ettiğini düşünürsek hiçte istenen bir durum olmadığı gözlenir. Çünkü siteler parayı yalnızca açılmış olan tek reklam üzerinde alacaklardır ki kullanıcılar da bir kez tıkladığı reklamı ikinci kez tıklamama ihtimali oldukça yüksektir.

Bu noktada MVC ile uygulama geliştirmek istiyoruz ancak reklamda kullanmak istiyoruz. Ayrıca uygulamanın performansının da hızlı olması için önbellekte kullanılması gerektiğini gözlemliyoruz. Peki, yapılabilecek bir işlem yok mu? Neyse ki bu sorunun çözümü oldukça basittir. Asp.Net Framework 'ü içerisinde yer alan post-cache substitution 'ı çağırmak yeterli olacaktır.

Not: Normal durumda OutputCache özniteliği yardımı ile sayfalar hem sunucu hem de son kullanıcının bilgisayarında yer alan internet tarayıcısında önbelleğe alınabiliyor. Değişken bir içerik kullanılacaksa (banner reklamlar gibi) post-cache substitution kullanımı ile sayfanın o bölümü sunucu üzerinde önbelleğe alınarak kullanılır.

Post-Cache Substitution Kullanımı

Post-Cache Substitution kullanımını iki adımda tamamlanabilinmesi mümkündür. Birinci adım, geri dönüş değeri string olan bir metot hazırlayarak dinamik içeriğin görüntülenecek olduğu önbelleğe alınacak olan bir sayfa oluşturmak olacaktır. Daha sonraki adımda ise dinamik içeriğin görüntüleneceği sayfaya HttpResponse.WriteSubstitution() metodunu kullanabilmek için ekliyoruz.

Bahsettiğimiz bu konuları bir örnek ile pekiştirmek gerekirse, ekran üzerinde rastgele veri gösteren değerleri önbelleğe alınacak dinamik bir web sayfası oluşturalım. Bu işlem için basitçe RenderNews() isimli bir metot oluşturalım. Geri dönüş olarak stringlist in içerisinde yer alan değerleri rastgele olarak göstersin.

Models\News.cs
using System;
using System.Collections.Generic;
using System.Web;

namespace DynamicContentCache.Models
{
    public class News
    {
        public static string RenderNews(HttpContext context)
        {
            var news = new List<string>
            {
                "Dünya 1",
                "Dünya 2",
                "Dünya 3"
            };

            var random = new Random();
            return new string[random.Next(news.Count)];
        }
    }
}

Model içerisine oluşturulan verileri view içerisinde oluşturacak olduğumuz sayfa içerisinde göstereceğiz. Bu sayfa içerisinde HttpResponse.Substitution() metodundan yararlanarak önbelleğe alınmış sayfa içerisinde dinamik içeriğin rastgele olarak görüntülenebilmesine olanak tanınacaktır.

Post-cache substitution yöntemini kullanabilmek için HttpResponse.WriteSubstitution() metodunu kullanıyor olacağız. Bunun için view sayfa içerisinde dinamik olarak değiştirilmesi istenilen değerler bu metot içerisine eklenilerek kullanılır.

Views\Home\Index.aspx
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<DynamicContentCache.Models.News>>" %>
<%@ Import Namespace="DynamicContentCache.Models" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Index
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <div>
        <% Response.WriteSubstitution(News.RenderNews); %>
        <hr />
             OutputCache içeriği
             <%= DateTime.Now %>
    </div>
</asp:Content>

WriteSubstitution() metodundan yararlanarak RenderNews() içerisinde yer alan değerleri her yenileme esnasında rastgele olarak getirilmesini sağlamaktadır.

Controller katmanında yer alan Home Controller sınıfının içerisindeki Index() Action unda da sayfa üzerinde gösterilecek olan değerlerin herhangi bir parametre almadan 60 saniyede bir önbelleğe alınmasını sağlayacak şekilde gerekli değişiklikleri yapıyoruz. Bir önceki yazımızda da değindiğimiz gibi önbelleğe alma işlemlerini [OutputCache] özniteliğini kullanarak yapabildiğimizi detaylı bir şekilde incelemiştik.

Controllers\HomeController.cs
using System.Web.Mvc;

namespace DynamicContentCache.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        [OutputCache(Duration=60, VaryByParam="none")]
        public ActionResult Index()
        {
            return View();
        }
    }
}

HomeController içerisinde yer alan Index() 'in içerisinde yer alacak olan verilerin ön belleğe alınmasını sağlamış durumdayız. Bu işlemler sonrasında Index.aspx sayfasının içerisinde yer alan değerler bir dakika boyunca önbellekte kalmaya devam edecektir. Ancak dinamik içeriklerin değişmesi istemiştik. WriteSubstitution() metodu sayesinde web sayfası önbelleğe alınmış olmamıza rağmen sorunsuzca dinamik verilerin güncellendiğini gözlemleyeceğiz. Yapmış olduğumuz işlemler sonrasında karşımıza çıkan ekran görüntüsü aşağıdaki gibi olacaktır.



Web sayfası görüntülenirken sayfayı her yenilediğimizde önbelleğe alınan kısım bir dakika boyunca sabit kalırken dinamik olarak değişmesini istediğimiz değer de sorunsuzca kendisini yenileme işlemini gerçekleştirmektedir.

Post-Cache Substitutionu Helper Metot içerisinde Kullanmak

WriteSubstitution() metodunu view sayfaların içerisinde kullanabilmekle birlikte bizlerin hazırlamış olduğu harici HTML Helper metotlar yardımı ile de kullanılabilmesi mümkündür. Bunun için projemize bir adet AdHelper.cs isimli helper sınıfı ekliyoruz ve aşağıdaki işlemleri uyguluyoruz.

Not: HTML Helper metotların nasıl oluşturulacağı konusunda yeterince bilgiye sahip olduğunuza inanmıyorsanız daha önceden yayınlanmış olan yazılarımızı okuyarak bu eksiğinizi tamamlayabilirsiniz.

Helpers\AdHelper.cs
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.Mvc;

namespace DynamicContentCache.Helpers
{
    public static class AdHelper
    {
        public static void RenderBanner(this HtmlHelper helper)
        {
            var context = helper.ViewContext.HttpContext;
            context.Response.WriteSubstitution(RenderBannerInternal);
        }

        private static string RenderBannerInternal(HttpContext context)
        {
            var img = new List<string>
            {
                "images/tuural.jpg",
                "images/turhal.jpg"
            };

            var random = new Random();
            var ad = img[random.Next(img.Count)];
            return String.Format("<img src='{0}' />", ad);
        }
    }
}

Statik olarak iki tane metot oluşturuyoruz. Bunlar, RenderBanner() ve RenderBannerInternal() 'dir. Helper metot olarak kullanılacak olan RenderBanner() 'ı hazırken WriteSubstitution 'nun callback yapacak olduğu değerileri alabilmesini sağlayan RenderBannerInternal() dir. Asp.Net MVC HtmlHelper sınıfından yararlanarak view sayfalarda Html.RenderView() şeklinde kullanılmasına olanak tanımış oluyoruz.

RenderView() metodu çağırıldığında HttpResponse.WriteSubstitution() metodu doğrulayarak RenderViewInternal() metodunu kullanacaktır. Ayrıca private bu metot içerisinde rastgele olarak seçilen banner resimlerin görüntülenmesi için gerekli işlemler sağlanmaktadır. Biraz önce yazılar için yapmış olduğumuz dinamik içeriklerin güncellenmesi işlemini şimdi de resimler için hazırlamış olduk.

Tekrardan kısaca oluşturulan harici HtmlHelper ları nasıl view sayfalarda görüntüleyeceğimizi hatırlayalım. İlk olarak yapılması gereken oluşturulmuş olan Helpers sınıfını web sayfasına <% import%> şeklinde eklemek olacaktır. Sonrasında ise helpers sınıfı içerisinde yer alan metotlardan HtmlHelper 'a göre oluşturulmuş olanlar biz web sayfasında <% Html. %> şeklinde bir kullanım esnasında otomatik tamamlama ekranında çıkacaktır. Sonrasında ise tek yapmamız gereken kendi Helper Metodunuzu projenizde kullanmak olacaktır. Bu ön bilgi sonrasında biraz önce oluşturulmuş olan Index.aspx sayfasını aşağıdaki biçimde güncelliyoruz.

Views\Home\Index.aspx
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<DynamicContentCache.Models.News>>" %>
<%@ Import Namespace="DynamicContentCache.Models" %>
<%@ Import Namespace="DynamicContentCache.Helpers" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Index
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <div>
       
<% Response.WriteSubstitution(News.RenderNews); %>
       <hr />
        <% Html.RenderBanner(); %>
        <hr />
             OutputCache içeriği
             <%= DateTime.Now %>
    </div>
</asp:Content>

Yapmış olduğumuz değişiklikler sonrasında Index.aspx sayfasına Html.RenderView() helper ini çalışacak şekilde ekledik ve uygulamayı hazır hale getirdik. Artık web sayfalarında gösterecek olduğumuz reklamları ve diğer aklımıza gelmeyen öğeleri önbelleğe alınmış olan sayfalarda dinamik içerik olarak oluşturabilir duruma getiriyoruz. Uygulamanın çalışması sonrasında aşağıdaki gibi bir ekran görüntüsüne sahip olacaktır.



Sonuç gayet başarılı... Her yenileme sonrasında zamanı gösteren değer sabit kalırken resim ve üstündeki yazı bizim belirttiğimiz gibi rastgele olarak değişmektedir.

Geldik bir yazımızın daha sonuna. Bu yazımızda önbelleğe alınmış olan sayfalarda yer alan verilerin belirli bir zaman aralığı boyunca yenilenemeyeceği ana fikrinden yola çıkarak dinamik olarak değişecek bir içeriğin bu sayfalar içerisinde nasıl kullanılacağını detaylı bir şekilde incelemeye çalıştık.

Umarım yararlı olabilmiştir.

Cuma, Eylül 25, 2009

İnsan Beyninin En Verimli Zaman Aralığı

Henüz 30 yaşındasınız ve 5 dakika önce elinizde olan anahtarı nereye koyduğunuzu hatırlamıyor musunuz? Kendinizi genç hissedebilirsiniz, ama beyniniz çoktan yaşlanmaya başladı bile.

ABD'de Virginia Üniversitesi tarafından yapılan ve sağlıkla ilgili bir internet sitesinde yayımlanan bir araştırmaya göre, en fonksiyonel ve mükemmel haline 22 yaşında ulaşan insan beyni, 27 yaşından itibaren ''düşüşe geçmeye'' başlıyor.

Araştırma, yaşları 18 ile 60 arasında değişen iyi eğitimli 2 bin kadın ve erkeğin, 7 yıl boyunca katıldıkları testlerin sonuçlarından oluşuyor.

Beynin 'en mükemmel hali' 5 yıl sürüyor
Araştırma raporunda, katıldıkları testlerde 2 bin denekten her yıl görsel bulmacalar çözmeleri, anlatılan öykülere ilişkin bazı detaylar vermeleri, çeşitli kelime oyunları oynamaları, bazı rakam ve sembolleri hatırlamaları istendiği ve deneklerin herhangi bir sağlık sorunu yaşamadıklarına özellikle dikkat edildiği kaydediliyor.

Sonuçlar değerlendirildiğinde, 12 testten en az 9'unda en başarılı performansların 22 yaşında elde edildiği belirtilirken, görsel olarak neden sonuç ilişkisi kurma, bulmaca çözümü ve hızlı algılama alanlarında 27 yaşından itibaren belirgin gerileme olduğu gözleniyor.

60 yaşına kadar koruma

ABD'de ''Nörobiyoloji'' dergisinin son sayısında, ''Yaşlanmanın Nörobiyolojisi'' başlığıyla yayımlanan araştırmaya göre, sağlıklı bir birey, 37 yaşına kadar hafızasını büyük ölçüde muhafaza ederken, kelime hazinesi ya da genel kültür gibi alanlarda hafızanın ortalama 60 yaşına kadar korunabiliyor.

Araştırma ekibinin başında bulunan Prof. Timothy Salthouse, ''sağlıklı ve eğitimli bazı yetişkinlerde idrake yörelik kayıpların 20'li, 30'lu yaşlarda başladığını'' belirterek, ''sağlıklı beyinlerdeki kayıpları anlamanın, Alzheimer gibi ciddi hastalıklarda neyin yanlış gittiğini çözmeye yardımcı olacağını'' kaydetti.

''Aktif olmak beyni koruyor''

AA muhabirine bilgi veren Nöroloji Uzmanı Dr. Behiye Mungan, hafızayı korumayı sağlayacak çok belirgin bir formül olmamakla birlikte, kişinin olabildiğince uzun süre aktif kalmasının beyin fonksiyonları açısından da yararlı olduğunu belirtti.


İnsan beyninin aktif kalmasında çevreden aldığı sinyallerin etkili olduğuna işaret eden Dr. Mungan, belli bir yaş grubu üzerindeki kişilerin ya da Alzheimer hastalığının ilk evresinde olanların, ''uzun süre işe yarar kalmalarının'' bazı fonksiyonların kaybını geciktirdiğini söyledi. Dr. Mungan, küçük egzersizler, bulmacalarla beyni her zaman canlı tutmaya çalışmak gerektiğini kaydetti.
(Kaynak AA)

Çarşamba, Eylül 16, 2009

Windows 7 – Türkiye Satış Fiyatları

Bugün itibari ile Windows 7 Türkiye pazarında satışa çıkmıştır. Almak isteyenler www.hepsiburada.com e-ticaret sitesi üzerinden alım gerçekleştribilmesi mümkündür. ( En ucuz burada satılıyor) Ürününü satın almak isteyenler; http://www.hepsiburada.com/search.aspx?sText=windows%207 adresinden yararlanabilirler.

Ayrıca ürünlerin ekran görüntüsü aşağıdaki gibidir.

Win7

Pazartesi, Eylül 14, 2009

DOLOTO

ee423534.doloto_project(en-us) Web uygulamalarında Ajax ve Javascript kullandığımızda görsellik olarak çok güzel noktalara gelmekle birlikte performans açısında sorunlar yaşabiliyorduk. Bu sorun DEVLABS ‘ın projelendirilecek ve sonuçlandırılacak ürünleri arasında yer alıyordu. Zaman içerisinde sorun projelendirildi ve günümüzde kullanılabilir bir duruma geldi.

Peki, DOLOTO ne işe yaramaktadır. Ajax ve Javascript ile geliştirilen uygulamaların optimizasyonuna olanak tanımaktadır. Web 2.0 uygulamalarında Ajax ‘ın yeri düşünüldüğünde gerçekten başarılı bir uygulama gibi gözüküyor. Hazırlanan uygulamalarında servera ve internet ağına gönderdiği trafiği %30 ile %40 arasında optimize ederek uygulamalarınızın daha hızlı bir şekilde çalışmasına olanak tanımaktadır.

Sizlerde bu uygulamayı denemek ve kullanmak istiyorsanız linke tıklayarak indirebilirsiniz.

Hepinize iyi çalışmalar…

Pazar, Eylül 06, 2009

Asp.Net MVC Framework - Validation İşlemleri - II

Günler geçtikçe ASP.NET MVC Framework hem ülkemizde hem de dünyada yayılmaya devam etmektedir. Geliştirdiğimiz web projelerinin geliştiriciler tarafında hızlı geliştirilebilmesine sağladığı olanaklar ve çalışma zamanındaki performansı ile tercih sebebi olma yolunda emin adımlarla ilerlemektedir. Ayrıca MVC kalıbını yıllardır web kullanıcıları kullanıyordu. Ancak ASP.NET MVC Framework ile birlikte gelen hazır özelliklerin bir çoğunu kendimiz oluşturmak durumunda kalıyorduk. Bu da bize MVC Framework ile geliştirdiğimiz uygulamaların geliştirilebilirliğinin daha da kolay olduğunun ufak bir göstergesidir.

ASP.NET MVC Framework ile yapılabilecekleri ufak örnekler yardımı ile bir süredir inceliyoruz. Bu sefer ise bir önceki yazımızda incelemiş olduğumuz Validation kontrollerini devam yazısı ile incelemeye devam ediyoruz. Bu yazımızda ModelState.AddModelError() ile yapmış olduğumuz hata kontrolünü kendi hazırlayacak olduğumuz sınıf yardımı ile nasıl yapabileceğimizi incelemeye çalışacağız.

Validation kontrolünü yine bir örnek ile inceleyelim ve veri tabanında ders tablosu oluşturalım.

mak60_1
Tabloyu oluşturduktan sonra bir MVC projesi oluşturacağız. Sonrasında ise projeye Entity Framework özelliklerinden yararlanmak için Entity Data Model ekleyeceğiz.

mak60_2
Not: Entity Model ile çalışırken unutulmaması gereken en önemli noktalardan biri model üzerine eklemiş olduğumuz tablo objelerinin isimlerinin veri tabanı ile aynı olmamasıdır. Bu sebepte veri modeline attıktan sonra ismini değiştiriyoruz. Bu açıkladığımız konuları uygularken zorluk yaşıyorsanız daha önce yayınlamış olan ilişkisel yazıları okuyabilirsiniz.

Temel işlemleri yapmaya devam ediyoruz. Diğer yazılarımızda da sıklıkça değindiğimiz verilerin getirilmesi ve yeni bir kayıt oluşturulması durumunda gerçekleşecek işlemleri sağlayacak metotları hazırlayalım. İş katmanı Controller olduğuna göre ve bu işleri ana sayfa üzerinde hazırlayacağımıza göre HomeController içerisinde bahsettiğimiz işlemleri gerçekleştiriyoruz.

using System.Linq;
using System.Web.Mvc;
using ValidationIslemler.Models;

namespace ValidationIslemler.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        private MVCArticleEntities _db = new MVCArticleEntities();
        public ActionResult Index()
        {
            return View(_db.OgretimUyesSet.ToList());
        }

        public ActionResult Create()
        {
            return View();
        }

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Create([Bind(Exclude = "id")] OgretimUyes yeniOgretimUyesiEkle)
        {
            if (!ModelState.IsValid)
                return View();

            try
            {
                _db.AddToOgretimUyesSet(yeniOgretimUyesiEkle);
                _db.SaveChanges();

                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

        public ActionResult About()
        {
            return View();
        }
    }
}

Daha önceki yazılarımızda Create metodunu otomatik olarak oluşturur ve içerisinde yazılması gereken işlemleri bizler doldururduk. Fakat bu işlemi direk bizde yapabiliriz. Yeni kayıt işleminin gerçekleşebilmesi için iki adet create metoduna ihtiyaç vardır. Birincisi create edilecek değer bulunamazsa geldiği view 'a döndürür. Bir diğeri ise Create işlemini gerçekleştiren bölümdür. Dikkat edeceğiniz üzere ikinci Create metodunda gelen verinin modele uyumluluğunu da kontrol ediyoruz. Bu durumda ilk Validation kontrolünü gerçekleştirmiş oluyoruz. Bu kontrol esnasında ModelState değeri negatif dönerse yeni kayıt oluştur linkine tıklanan sayfaya geri dönecektir. Ayrıca bu durumda hataya düşüyorsanız elle ya da otomatik olarak oluşturmuş olduğunuz HTML sayfanın Model 'den veri aldığına emin olarak işlemlerinizi gerçekleştirebilirsiniz.

Yazımızın başında da bahsetmiştik, model üzerinde veri kontrollerini yapmak için gerekli işlemleri nasıl oluşturacağımızı inceliyor olacaktık. Bu aşamada ilk olarak projeye eklemiş olduğumuz Ado.Net Entity Model 'in design tarafında otomatik olarak oluşturulmuş olan cs koda göz atalım.

mak60_3

Gördüğümüz kadarı ile model içerisinde erişebildiğimiz sınıflar partial class olarak tanımlanmaktadır. Peki, "partial class neydi?" kısaca hatırlamak gerekirse;

Partial classların ne olduğunu kısaca hatırlamak gerekirse; fiziksel olarak yada aynı fiziksel dosyada (amacına göre ayrı iki .cs dosyasında olması makbul ve mantıklıdır) tanımlanan class tanımlarının tek bir class olarak çalışması ve derlenmesidir. Yani aslında bir sınıfın metotların farklı .cs dosyalarında tanımlayabilmeyi sağlar.

Bu durumda IDataErrorInfo ara yüzünü kullanabileceğimiz sınıfı partial olarak oluşturup içeriğini düzenleyeceğimiz duruma getiriyoruz. Model katmanının içerisine yeni bir sınıf ekliyoruz.

Models\OgretimUyesi.cs
using System.Collections.Generic;
using System.ComponentModel;

namespace ValidationIslemler.Models
{
    public partial class OgretimUyesi
    {

    }
}

Entity Framework ile hazırlanmış olan data modelde partial sınıflar otomatik olarak oluşturulmaktadır. Entity Framework ile oluşturulan kodlarda otomatik olarak OnChanging ve OnChanged partial sınıfları oluşturulur.

Şimdi bizde oluşturmuş olduğumuz sınıfın içerisine Aşağıdaki metotları ekleyelim.

•OnIdChanging
•OnIdChanged
•OnAkademisyenChanging
•OnAkademisyenChanged
•OnUnvanChanging
•OnUnvanChanged
•OnDersSaatiChanging
•OnDersSaatiChange

OnChanging metotları OnChanged metotlarını tetikleyerek çalışır ve güncelleme işlemlerinde ID özelliklerinden yararlanarak bizim istediğimiz değişiklikleri yapamabilmemize olanak tanır.

Şimdi yukarıdaki bilgilerimizden yararlanarak eklemiş olduğumuz partial sınıfı biraz düzenleyelim. Yapacak olduğumuz değişiklikler ile son kullanıcının web form üzerinden Akademisyen ve Unvan bilgilerini boş girmemesi için gerekli olan kod parçasını oluşturalım.

Yazımızın içerisinde daha öncede bahsettiğimiz gibi Validation işlemlerini yaptığımız durumlarda IDataErrorInfo ara yüzünün özelliklerinden yararlanarak çok daha işlevsel bir hata kontrolü yapabilmemiz mümkündür.

using System.Collections.Generic;
using System.ComponentModel;

namespace ValidationIslemler.Models
{
    public partial class OgretimUyesi:IDataErrorInfo
    {
        private Dictionary<string, string> _errors = new Dictionary<string, string>();

        partial void OnAkademisyenChanging(string value)
        {
            if (value.Trim().Length == 0)
                _errors.Add("Akademisyen", "Akademisyen bilgisi boş geçilemez.");
        }

        partial void OnUnvanChanging(string value)
        {
            if (value.Trim().Length == 0)
                _errors.Add("Unvan", "Unvan bilgisi boş geçilemez.");
        }
    }
}

Yapmış olduğumuz işlem sonrasında örneğin akademisyen bilgisi boş geçildiğinden _errors Dictionary<> 'sine hata mesajı yazılacak ve kullanıcıya gösterilecektir.

IDataErrorInfo ara yüzü ile oluşturmuş olduğumuz sınıfı birlikte kullanmamız da gerekmektedir. Zaten OgretimUyesi sınıfına ara yüzü eklediğimiz zaman bize otomatik olarak aşadağıki metotları getirmektedir. Bakalım IDataErrorInfo ara yüzünün içerisinde hangi metotlar yer almaktaymış.

public interface IDataErrorInfo
{
    string this[string columnName] { get; }

    string Error { get; }
}

HomeController içerisinde oluşturmuş olduğumuz Crete() kontrolüne ilişkin kontrolleri üzerinde değişiklik yaptığımız OgretimUyesi.cs üzerinde IDataErrorInfo ara yüzünden yararlanarak Validation kontrolleri işlemlerini gerçekleştirdik.

OgretimUyesi sınıfının içerisinde eğer Akademisyen ve Unvan alanları boş geçilirse verilecek olan hata belirtilmiştir. Boş geçilmesi durumunda kolon adını kontrol edecek olan IDataErrorInfo ara yüzü olacaktır. Bu durumda ara yüze ilişkin özelliklerden error 'a istediğimiz kontrol sonucunda hata oluşursa son kullanıcının sayfasında görüntülenmesine olanak tanırız. Ayrıca hata olması sonucunda geri dönüş değeri olarak boş string döndürelim.

Şimdi yukarıda açıklamış olduğumuz özelliklere göre IDataErrorInfo ara yüzü ile ilişkilendirelim ve özelliklerine gerekli değerleri atayalım.

using System.Collections.Generic;
using System.ComponentModel;

namespace ValidationIslemler.Models
{
    public partial class OgretimUyesi : IDataErrorInfo
    {
        private Dictionary<string, string> _errors = new Dictionary<string, string>();

        partial void OnAkademisyenChanging(string value)
        {
            if (value.Trim().Length == 0)
                _errors.Add("Akademisyen", "Akademisyen bilgisi boş geçilemez.");
        }

        partial void OnUnvanChanging(string value)
        {
            if (value.Trim().Length == 0)
                _errors.Add("Unvan", "Unvan bilgisi boş geçilemez.");
        }

        #region IDataErrorInfo Members

        public string Error
        {
            get { return string.Empty; }
        }

        public string this[string columnName]
        {
            get
            {
                if (_errors.ContainsKey(columnName))
                    return _errors[columnName];
                return string.Empty;
            }
        }

        #endregion
    }
}

Artık özellikler sonrasında boş geçilen değerler _errors koleksiyonuna eklecek ve son kullanıcı sayfasında gösterilecektir.

Bu arada yazımız boyunca yaptığımız bütün işlemleri OgretimUyesi sınıfının içerisinde yaptığımızı ve HomeController sınıfında hiç bir değişiklik yaptığımızı unutmayalım.

Sonuç olarak neler yaptığımızı tekrardan bir üstünden geçmek gerekirse, IDataErrorInfo ara yüzü yardımı ile otomatik olarak gösterilen kontrol mesajlarını nasıl oluşturabileceğimize göz attık. Daha sonrasında ise OnAkademisyenChanging() ve OnUnvanChanging partial metotlarını OgretimUyesi sınıfına ekledik. Bu eklediğimiz metotlar yardımı ile Asp.Net MVC Framework uygulamalarında kendimize özgü Validation mesajlarını nasıl gösterebileceğimizi öğrenmiş olduk.

Umarım yararlı olabilmiştir.

Turhal Temizer
info@turhaltemizer.com

Cumartesi, Eylül 05, 2009

Windows 7 Enterprise – RTM Download

Windows 7 ‘nin satış tarihi yaklaştıkça insanları bir merak sarıyor. Acaba nasıl, hızılı mı, ne kadar bir bilgisayar özelliği gerektirecek gibi… Eğer windows 7 ‘i kullanmayı düşünüyorsanız aşağıda verecek olduğum link yardımı ile Windows 7 Enterprise sürümünün hem 32 bit hem de 64 bitlik veriyonlarının 90 günlük deneme sürümlerini indirebilmeniz mümkündür.

http://technet.microsoft.com/en-us/evalcenter/cc442495.aspx?ITPID=wtcfeed

İyi çalışmalar…