Etiket Arşivi [ ASP.Net MVC 3 ] - Sayfa 1 / 2

  1. ASP.Net MVC 3 Örnekleri

    27/07/2011 06:56 |ASP.Net MVC |ASP.Net MVC 3 |

    Geçtiğimiz dönemde ASP.Net MVC güncel sürümü olan ASP.Net MVC 3 kullanıcılara açıldı. Bu sürümde ASP.Net MVC tamamlayıcı ve şekil almasında önemli yenilikler ile geldi. ASP.Net MVC 3 çıktığı dönemde bazı yenilikleri denemek ve bunlar üzerinde deneyim kazanmak için bazı ASP.Net MVC 3 çalışmalarında bulunmuştum. Bu yazımda, hazırlamış olduğum örnekleri sizler ile paylaşmaktayım.

    aspnet-mvc3

    ASP.Net MVC 3 örnekleri BookStore(ASP.Net Öğreniyorum serisi uygulaması) da olduğu gibi Code Hosting sistemine yüklemiş bulunmaktayım. ASP.Net MVC 3 örneklerini “get source” seçeneğini kullanarak indirebilirsiniz(zip/bz2/gzip)

    Code Repository /  https://bitbucket.org/ibrahimatay/atay.mvc3samples

    Konu ile ilgili katkıda bulunmak isteyen kişilerin info@ibrahimatay.org eposta adresi ile benim ile iletişime geçebilirler.

    Teşekkürler

    IBRAHIM ATAY

    footer
  2. ASP.Net MVC 3 Notları – 2(GlobalActionFilter)

    09/02/2011 20:17 |ASP.Net MVC |ASP.Net MVC 3 |

    Geliştirdiğimiz Web uygulamalarında, rutin olarak her istemede bazı işlemler yapmamız gerekebilir. Söz konusu istem sürecini bir sayfa oluşum süreci olarak da düşünebiliriz. Bu süreci ASP.Net MVC 3 ile gelen GlobalActionFilter özelliği ile çözebiliriz. Konuyu daha iyi anlama adına örnek uygulama hazırlayalım.

    Uygulama için ASP.Net MVC 3 (ASP.Net MVC 3 sürümü ve diğer bilgiler için bağlantıdaki bilgilere bakınız.) oluşturalım. Oluşturmuş olduğunuz ASP.Net MVC 3 projesine, Utils klasörü oluşturalım ve bu klasöre StopWathAttribute isimli bir sınıf ekleyelim.

    image

    Eklemiş olduğumuz sınıfın içerisine girelim. Söz konusu sınıfın ActionFilterAttribute sınıfında türetelim. ActionFilterAttribute sınıfı üzerinde türetmiş olduğumuz, StopWathAttribute sınıfını ActionFilterAttribute nesnesi üzerinden gelen OnActionExecuting ve OnResultExecuted olaylarını override edelim.

    namespace Mvc3GlobalActionFilters.Utils
    {
        using System.Diagnostics;
        using System.Web.Mvc;

        public class StopWatchAttribute : ActionFilterAttribute
        {
            private Stopwatch wath;

            public StopWatchAttribute()
            {
                this.wath = new Stopwatch();
            }

            public override void OnActionExecuting(
                    ActionExecutingContext filterContext)
            {
                this.wath.Start();

                base.OnActionExecuting(filterContext);
            }

            public override void OnResultExecuted(
                        ResultExecutedContext filterContext)
            {
                this.wath.Stop();

                var context = filterContext.HttpContext;
                var response = context.Response;

                context.Response.Write(
                    string.Format("<!-- oluşturma süresi {0} -->",
                                    this.wath.Elapsed.ToString()));

                base.OnResultExecuted(filterContext);
            }
        }
    }

    Sınıf içerisinde override etmiş olduğumuz olaylar ile uygulama üzerine yapılan istemleri takip edeceğiz. Bu uygulamamızda, geliştirdiğimiz uygulamaya yapılan istemlerin süreçleri hesaplayacağız. Bu işlemler için System.Diagnostics altında yer alan StopWatch nesnesini kullanacağız. Bu nesne yardımı ile istemin başlangıcı dan bitişine olan süreci, zaman birim olarak elde etmiş olacağız.

    Yapmaya başladığımız bu uygulamada OnActionExecting olayında süreç hesaplama işlemine başlıyoruz. Bu işlem sayfa hazırlanması ve kullanıcıya sunulması tamamlanması olayı olan OnResultExecuted da duruyoruz. İşleminin sonucunu görmek adına OnResultExecuted olayı parametresi olan filtercontext nesnesini Response ile sayfasına oluşum süresini yazdırıyoruz.

    namespace Mvc3GlobalActionFilters
    {
        using System.Web;
        using System.Web.Mvc;
        using System.Web.Routing;
        using Mvc3GlobalActionFilters.Utils;

        public class MvcApplication : HttpApplication
        {
            public static void RegisterGlobalFilters(
                            GlobalFilterCollection filters)
            {
                /// Uygulama içerisinde hata yönetimini
                /// yapana globalfilter nesnesini
                /// ASP.Net MVC sistemine kayıt edildi.
                filters.Add(new HandleErrorAttribute());
            }

            public static void RegisterRoutes(RouteCollection routes)
            {
                routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

                routes.MapRoute(
                    "Default",
                    "{controller}/{action}/{id}",
                    new { controller = "Home", action = "Index",
                        id = UrlParameter.Optional });
            }

            protected void Application_Start()
            {
                AreaRegistration.RegisterAllAreas();

                /// Hazırlamış olduğumuzu global action filter nesnesini
                /// ASP.Net MVC sistemine tanıtmış olduk.
                GlobalFilters.Filters.Add(new StopWatchAttribute());

                RegisterGlobalFilters(GlobalFilters.Filters);
                RegisterRoutes(RouteTable.Routes);
            }
        }
    }

    Geliştirmiş olduğumuz StopWathAttribute nesnesini uygulama içerisinde kullanmak için Web uygulamasının kalbi olan Global dosya içersinde bulunan Application_Start() olayında GlobalFilter koleksiyonuna dahil etmemiz gerekmektedir (Bu işlem ActionFilterAttribute üzerinden türetimesi nedeniyle polimorfik olarak gerçekleşecektir.).

    Hazırlamış olduğumuz örneğinin sürecini inceleyecek olursak;

    1. Web uygulamasından istem yapılır.
    2. Yapılan bu istem sonucunda Application_Start() olayı ile GlobalFilter koleksiyonuna, hazırlamış olduğumuz ActionFilterAttribute nesnesi eklenir.
    3. Koleksiyona eklene ActionFilterAttribute nesnesi, sıra ile olaylarını tetikler.
    4. Son olarak Sayfa sonuna, sitem süreci yazılarak işlem tamamlanır.

    Not: “RegisterGlobalFilters “ isimli fonksiyonu içerisinde yer alan “HandleErrorAttribute” nesnesi ile ASP.Net MVC 3 sürümü öncesi Controller de hata yönetimi için kullandığımız HandleError attribute yerine daha kolay hata yönetimi yapmamıza olanak tanımaktadır.

    image

    Bu makalemizde ASP.Net MVC 3 yeniklerinde biri olan GlobalActionFilters özelliğini inceleye çalıştık. Bu ile de ASP.Net MVC Notları serisinin ikinci bölümünü tamamladık. Uygulama örneklerini son makalemizin sonunda bulunan repository ile sizlere sunacağım. Konu ile ilgili sorularınızı info@ibrahimatay.org eposta adresine gönderebilirsiniz.

    IBRAHIM ATAY 

    Teşekkürler

    footer
  3. ASP.Net MVC 3 Notları – 1(Giriş)

    03/02/2011 12:28 |ASP.Net MVC |ASP.Net MVC 3 |

    Değişen insan ihtiyaçlarına karşın, teknolojide değişmektedir. Geçtiğimiz dönemlerde ASP.Net WebForm ile uygulama geliştirme gerçekliyorduk. Bugün artan uygulama geliştirme taleplerine bağlı olarak, Web uygulamaların MVC(Model-View-Controller) tasarım deseni ile geliştirme yapıyoruz. Bu tarz uygulamaların, geliştirme aşamasında daha kolay test edilebilir hale getirmektedir. Söz konusu tasarım desenini ASP.Net platformunda gerçekleştirmek istiyor isek, karşımıza ASP.Net MVC Framework ‘ ü çıkmaktadır.

    image

    ASP.Net MVC Framework ‘ ü diğer .Net teknolojilerinde de olduğu gibi iki sürümün de kendini bulmuştur. Bu sürüm ile yeni geliştirilecek olan Web uygulamalarında stratejileri değişmesine neden oldu. Artık geliştirilen uygulamanın performansı, bakımı ve birçok neden dolayı kullanılmaya başlanmıştı. Somut olarak ASP.Net MVC Framework’ ün cazip gelmesinin sebebi ise;

    ASP.Net MVC ile Web uygulaması geliştirmek için Server kontrolleri bilinmesi yerine Web ‘in temel dilleri olan HTML,CSS ve JavaScript dillerini bilinmesi ve ek olarak ise olay odaklı sistemleri anlamak yeterlindir.

    ASP.Net MVC Framework ‘ün ile getirdikleri yönünde bakacak olur isek; Controller kavramını kullanımı sayesinde, geliştirilen Web uygulamasının test kodu yazılması, daha kaliteli uygulama geliştirebilmesini sağlanmıştır. ASP.Net MVC ’nin getirdiklerini kullanıcı tarafından bakacak olur isek; temiz içerik ve anlamlı adres(Routing) üretimidir. Bu özellikler uygulama içerisinde sunulan ürün ya da bilgilerinin arama motorları(Bing,Google) daha kolay bulabilmesi, hazırlanan içeriğin hızlı cevap vermesini sağlamaktadır.

    ASP.Net MVC Framework’ün uygulamalarımıza katığı bu özelliklerin yanında yeni sürümü ile de birçok kolaylık sunmaktadır. Bu yenilikler aşağıdaki gibi sıralama yapabiliriz.

    • Razor View Engine
    • Multi View Engine
    • Dependency Injection kullanım kolaylığı
    • Dynamic View ve ViewModel
    • Validation Impovemets
    • Session Yönetimi
    • Global Action Filters
    • JavaScript ve AJAX yenlikleri

    ASP.Net MVC Framework ’ün yeni sürümü olan ASP.Net MVC 3 ile ilgili yenilikler hakkındaki “ASP.Net MVC 3 Notları“ isimli seri ile inceleyeceğiz. Şimdi yenilikler hakkında kısa bilgilere verelim.

    Razor View Engine

    ASP.Net MVC 3, önceki sürümlerinde farklı olarak yeni bir View Engine yapısı ile gelmektedir. ASP.Net MVC ‘nin önce ki sürümlerinde Saprk View Engine ya da NHaml gibi View Engine yapıları ile View tasarımlarımız daha kolay bir şekilde gerçekleştir biliyorduk. Razor View Engine ile ASP.Net MVC 3 bütünleşik olarak geldiği için ve .Net 4 desteği ile ASP.Net MVC uygulamalarını daha kolay ve hızlı geliştirebiliyoruz.

    Multi View Engine

    ASP.Net MVC 3 yeniliklerinde bir olan Razor View Engine gibi ASP.Net MVC uygulamalarında View tasarlama işlemlerimizi kullanabileceğimiz birden fazla View Engine bulunmaktadır. Multi View Engine yeniliği sayesinde, uygulama projemize şablon dahil etme aşamasına farklı View Engine kullanmayı amaçlamaktadır.

    Dependency Injection kullanım kolaylığı

    ASP.Net MVC 2 ve önceki sürümlerinde MvcTurbine ve benzeri araçları kullanarak ASP.Net MVC uygulamalarımızda IoC uygulamalarımızı gerçekleştiriyorduk. ASP.Net MVC 3 sürümü ile ise, çözümü kendi içerisinde oluşturmayı amaçlayan Ioc ara yüz(interface) nesneleri bulunmaktadır.

    Dynamic View ve ViewModel

    Bu özellik ile .Net 4 yeniklerinde biri olan Dynamic Type özelliğini ASP.Net MVC içerisinde yer alması anlamına gelmektedir. Bu sayede sanki öyle bir özellik varmışçasına, söz konusu özelliği kullanabilmemize izin vermektedir. .Net 4 ile C# herhangi bir alanda hazırlana Dynamic işlemde olduğu gibi söz konusu tanımlama çağırıldığında hata olup olmadığı durumu anlaşılmaktadır.

    Validation Impovemets

    ASP.Net 4 ile birlikte gelene yeniliklerden bir tanesidir. Bu şekliyle ASP.Net 4 üzerine gelene gelişmiş doğrulama yapısını, ASP.Net MVC 3 birlikte kullanabilmekteyiz.

    Session Yönetimi(SessionState)

    Geliştirmiş olduğumuz ASP.Net MVC projesinin içerisinde bulunan Controller nesnesini Session içerisinde veri taşıması istemeye biliriz. Bu gibi durumlar için geliştirilmişi Attribute yapısıdır.

    Global Action Filters

    Bazı durumlarda geliştirmiş olduğumuz ASP.Net MVC uygulamasının, uygulama yapılan her istemi denetlemek ya da uygulamalardan yapılan istemler sırasında gerçekleşecek işlemler olabilir. Bu gibi durumlar için geliştirilmiş bir yapıdır.

    JavaScript ve AJAX yenlikleri

    Standart bir ASP.Net MVC şablonu oluşturduğumuz varsayılan olarak projemize Script klasörü gelmektedir. Bu klasör içerisinde ise, ASP.Net AJAX ve JQuery ile ilgili JavaScirpt dosyaları gelmektedir. ASP.Net MVC 3 sürümü ile AJAX konusunda daha iyileştirilmiş bir şekilde kullanıcılarına sunulmaktadır.

    ASP.Net MVC 3 ile gelen yeniliklere kısa incelemelerde bulunduk. Şimdi bazı yenilikler uygulamalı olarak incelemeye başlayalım. Bu işlem için standart ASP.Net MVC 3 şablonu açalım. İlk örneğimizde ASP.Net MVC 3 dokümanlarında pek geçmeyen bir yenilik olan kaynak hataları (404) problemi ile ilgili çözümleri inceleyelim.

    image

    Kaynak hataları ile ilgili olarak WebForm çalışmalarımızda Web yapılandırma dosyası sayesinde problemi çözüme ulaştırılabiliyordu. ASP.Net MVC 3 uygulamaları gelindiğinde, söz konusu durumlar ile ilgili daha ayrıntılı çözümler ile problemi yönetebiliyoruz. ASP.Net MVC 3 çözümü ile ilgili olarak oluşturmuş olduğumuz HomeController sınıfını içerisine girelim. HomeController sınıfı içerisinde varsayılan olarak eklenen ActionResult fonksiyonlarında birinin (About) erişim belirtecini private olarak değiştirelim(Bu sayede herhangi bir View isteminde ActionResult erişimi olmayacaktır.).

    Senaryo ile ilgili şartları hazırladık. Bu aşmadan sonra ASP.Net MVC 3 çözümü nasıl gerçekleştiğini görelim. Bunu için Controller içerisine girelim. Controller nesnesi üzerinden gelene HttpNotFound fonksiyonun override edelim.

    ///  Uygulama içerisinde 404 yani kaynak bulunamadığı 
    ///  durumlarda bu fonksiyon tetiklendir.
    protected override HttpNotFoundResult HttpNotFound(string
                                                 statusDescription)
    {
        return base.HttpNotFound(statusDescription);
    }

    Hazırladığımız senaryoyu test edelim. Gerçekleştirdiğimiz bu test işleminde eğer OnException fonksiyonu override edilmiş ise önce bu fonksiyonu gelecektir. Hata yönetiminde diğer adım olarak ise, yaşanan durumun bir kaynak hatası(404) ile ilgili olarak HttpNotFound fonksiyonuna gelinecektir.

    Konu almak istediğim bir diğer uygulama ise Dynamic View ve ViewModel özelliğidir. Söz konusu yenilik .Net 4 ile .Net programlama alanına girmiştir. Bu özellikler sayesinde, ASP.Net MVC içerisinde sanki ViewData üzerinde kullandığımız property(özellik) varmış gibi kodlama yapmamızı sağlamaktadır. Bu işlem Controller tarafında olduğu gibi View tarafında da kullanılabilmektedir.

    /// Dynamic View ve ViewModel 
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            /// ASP.Net MVC 1-2 sürümlerinde kullandığım
            ViewData["Message"] = "ASP.NET MVC 3 Notları";

            /// ASP.Net MVC 3 sürümünde kullandığımız
            ViewBag.Message = "ASP.NET MVC 3 Notları";

            return View();
        }
    }

    Söz konusu durumu ASP.Net MVC 3 sürümü öncesi olarak düşünüldüğünde ise ViewData nesnesi ile (hastable gibi) View tarafına verilerimizi taşımaktaydık. Ama Dynamic kullanım, diğer kullanım alanlarında da olduğu gibi çağırıldığında denetimi yapılmaktadır. Bu durumda yapılan yazım yanlışları ya da unutulan tanımlamalar gibi durumlarda geliştiricilere hatalar üretmektedir.

    Bu makale ile ASP.Net MVC 3 yeniliklerini anlatan bir diziyi başlatmış olduk. Konu ile ilgili sorularınızı info@ibrahimatay.org eposta adresine yönetebilirsiniz.

    IBRAHIM ATAY

    footer
  4. ASP.NET MVC 3 RC Sürümüne Bakış Webiner Notları

    15/01/2011 20:21 |ASP.Net MVC |ASP.Net MVC 3 |

    Geçtiğimiz dönemde gerçekleştirmiş olduğum “ASP.Net MVC 3 RC Sürümüne Bakış” internet Seminerinde  ASP.Net MVC 3 ‘ün RTM adayını incelemeye çalışmıştık.

    ASP.Net MVC 3 RC Sürümüne Bakış Webinerimizde zaman yettiğince, ASP.Net MVC 3 ‘ün yeniklerinde bahsederek, örnek uygulamaları gerçekleştirdik. İnternet Semineri ve video düzenleme gibi işlemleri tamamlanmasından sonra, siz takipçilerime Nedir?Tv(ASP.Net MVC 3 RC Sürümüne Bakış) sayesinde sunmuş bulunmaktayım.Bu yazım ile de sizlere internet Seminerinde kullanmış olduğum materyalleri paylaşmak istemekteyim.

    Not: internet Seminerine katılan tüm arkadaşlar teşekkür ederim.

    Saygılarımla

    IBRAHIM ATAY

    footer
  5. ASP.NET MVC 3 RC Sürümüne Bakış

    08/12/2010 00:06 |ASP.Net MVC |ASP.Net MVC 3 |

    Gene bir ASP.Net MVC eğitimi ile daha sizlerleyim. Geçtiğimiz dönemde ASP.Net MVC 3 RC sürümü yayınlanmış bulmaktadır. ASP.Net MVC 3 RTM olmadan konuya daha net bakabilmek ve kısa notlar alabilmeniz için NedirTV ailesi olarak “ASP.NET MVC 3 RC Sürümüne Bakış” isimli Webiner düzenlemiş bulunmaktayız.

    aspnet-mvc-3-webcast

    Konu ile ilgili olarak daha önce kaleme aldığım “ASP.NET MVC 3 Preview 1 Duyuruldu !!” ve “ASP.Net MVC 3 RC oldu !ASP.Net MVC 3 yenliklerine başlıklar halinde değinmeye çalışmıştım. Webinerimiz ile birlikte konuya pratik ve gerçek örnekler ile bakış atmamız ASP.Net MVC Framewok kullanıcıları için iyi olacaktır.

    ASP.Net MVC 3 RC Sürümüne Bakış (Webiner bilgisi)  / http://nedirtv.com/webiner/26

    Şimdiden konu ile ilgilene ya da merak eden arkadaşları ASP.Net MVC 3 RC Sürümüne Bakış Webinerine bekliyorum.

    Saygılarımla

    IBRAHIM ATAY

    footer