Category Archives: ASP.Net MVC 3

ASP.Net MVC 3 Örnekleri

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://github.com/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

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

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

ASP.Net MVC 3 Yenilikleri

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

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

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

ASP.Net MVC 3 Sürüm Yenilikleri

asp_dotnet_mvc_logo

Gelişimi devam eden her teknoloji gibi ASP.Net MVC de ASP.Net MVC 3 sürüm  ile kullanıcılarına sunuldu. ASP.Net MVC 3 sürümü ile ASP.Net MVC 2 ile içerisinde bulunan bazı boşlukları kapatarak, ASP.Net MVC Framework ’ün daha güçlü ve iş kolaylaştırıcı  yapıya sokmaktadır.

ASP.Net MVC 3 ile gelene yenilikler ise;

  • Razor View Engine
  • Multi View Engine
  • Dependency Injection kullanımları için kolaylıklar
  • Dynamic View ve ViewModel
  • Validation Impovemets
  • Session Yönetimi
  • Global Action Filters özelliği
  • JavaScript ve AJAX yenlikleri

Söz konusu yenikler ASP.Net MVC Framework ‘ün uygulamalarda kullanılmasını daha cazip kılmaktadır. Kişisel düşüncem olarak “ASP.Net MVC 3 ile ASP.Net MVC gereken tüm takım sadığının oluşturulduğunu” söyleyebilirim. Sürüm ile ilgili paketleri ve diğer bilgileri bağlantıdaki(www.asp.net/mvc) adresten edinebilirsiniz.

Not: ASP.Net MVC 3 ilerleyen dönemde makalelerim ile daha iyi anlatmaya çalışacağım.

Saygılarımla

IBRAHIM ATAY