mehmetduran.com - Paylaşmak Güzeldir...
Asp.net MVC'de Action'lar için Özellik (Attribute) Tanımlama ve Kullanma
Bu yazımda MVC'de yer alan Controller bölümünde tanımlanan Action'lar için özellik (attribute) tanımlama ve kullanma olayını ele alacağız. Bu yöntem ile birçok kontrolü ve işlemi düzenli bir biçimde kod tekrarı olmadan yapabilmekteyiz. MVC ile hazır olarak birçok özellik (HandleError, Authorize, Cache, vb.) gelmekte. Ancak her zaman bu özellikler işimizi görmeyebilir. Bunun için ihtiyaçlarımıza göre kendi özelliklerimizi tanımla ve kullanma durumunda kalabiliriz. Şimdi MVC'de özellik tanımlama ve kullanma olayını nasıl gerçekleştireceğimize bakalım.

Yazacağımız özellik (attribute) sınıfı (class) ActionFilterAttribute sınıfını inherit (kalıtım) etmeli. Bu şekilde kalıtım yoluyla Action'ların çalışma zamanlarına göre çalışacak kodları override ile kendimiz belirtebiliyoruz. Aşağıdaki kodlarda deneme amaçlı yazdığım özellik sınıfını ve kullanımını görebilirsiniz.

namespace MD
{
  public class BenimOzelligim : ActionFilterAttribute
  {
    public string KimlikNo { get; set; }
 
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
      // action çalışmadan önce yapılacak işlemler
 
      if (KimlikNo != "12345")
      {
        filterContext.HttpContext.Response.Redirect("~/Home/Giris");
      }
      base.OnActionExecuting(filterContext);
    }
 
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
      // action çalıştıktan sonra yapılacak işlemler
 
      if (!filterContext.Controller.ViewData.ModelState.IsValid)
      {
        filterContext.HttpContext.Response.Redirect("~/Home/Hata");
      }
      base.OnActionExecuted(filterContext);
    }
  }
}
 
 
// Kullanımı
public class HomeController : Controller
{
  [MD.BenimOzelligim(KimlikNo="12345")]
  public ActionResult Index()
  {
    return View();
  }
}


Bu şekilde MVC ile kendi ihtiyaçlarımıza göre özellikler tanımlayabilir ve kullanabiliriz. Böylece yapılacak olan kontrolleri ve işlemleri en hızlı biçimde en az kod tekrarıyla düzenli bir biçimde yapmış oluruz. Hazır olarak gelen özellikler de olmasına karşın bunların yeterli olmadığı durumlarda kendi özelliklerimizi tanımlamalı ve kullanmalıyız.

İyi Çalışmalar.
Bookmark and Share
Bu Yazıyı Değerlendirin.
Konuyla İlgili Olabilecek Diğer Yazılar jQuery Ajax ile UserControl'leri Etkin Kullanma Asp.net ExpressionBuilder ile Kontrollerde Server Tagları Kullanma Asp.net ile Veritabanı İşlemlerinde Etkin Kodlama Yöntemi Bloğumda ve Projelerimde Kullandığım RSS Sınıfı Asp.net MVC Captcha Uygulamam
Yorumlar
Yorum Yaz
RSS Yorum Takibi
Hasan Cemal 30 Nisan Cuma 2010 17:41 #1
Kardeşim siteni yakından takip ediyorum. Bugüne kadar çoğu paylaşımını çok başarılı buldum. Ta ki bu paylaşımına kadar inan kardeşim yukarıdan paylaşmış olduğun kod bloğundan hiçbirşey anlamadım. Biraz daha basite indirgeyip ne yaptığını açıklarsan sevinirim.
Mehmet Duran 30 Nisan Cuma 2010 23:03 #2
Öncelikle teşekkür ederim. Buradaki yazımda verdiğim örnek biraz anlamsız olmuş olabilir. Burada anlatmak istediğim konu MVC'nin Controller bölümünde tanımladığımız Actionlar için özel Attribute'lar tanımlamak idi. Mesela Ajax işlemlerinde kullanıdığımız metotlar [Webmethod] özelliğini alırlar. Biz burada bu özelliği kendimiz nasıl yapabiliriz bunu görüyoruz. MVC'de böyle bir kullanımı belirli değerlere göre Actionların çalışıp çalışmamasını kontrol etmek için kullanabiliriz. (Örneğin: kullanıcı giriş yapmış mı yapmamış mı, rolü geçerli mi değil mi gibi, vb. gibi durumlar için kullanılabilir - söylediğim örnekler için tanımlanmış attributes'lar hali hazırda var. Bu yöntemle bunlara benzer yeni özellikler tanımlanabilir ve kullanılabilir.) Umarım anlatabilmişimdir.
İsim :
Site :
Yorum :

Buradan bu yazıya ait yorumları RSS olarak takip edebilirsiniz.

Bu servis ile yazılara eklenen yorumları RSS ile takip ederek konu ile ilgili başkaları tarafından yapılan yorumları veya konuyla ilgili sorduğunuz sorulara verilen cevapları görebilirsiniz.
Kimse sana senden iyi öğüt veremez.
Bölümler
Yazılar
Arşiv
Arama
Linkler
Site İçi Arama
Son Zamanlarda Ne Yapıyorum ?
İstatistikler - Araçlar - Reklam
İstatistikler
Sayaç
Mehmet Duran | mehmetduran.com | Copyright © 2009