jquery en çok kullanılan seçiciler-filtreler

Jquery ile aşağıdakiler gibi vs işlemler yapılabilir.
-ismi “iletisim” olan nesneler üzerinde işlem yap ,
-id’si “kaydet” adında butonlara işlem yap,
-index numarası “3” den küçük labelleri seç ya da üzerinde işlem yap,
-listeler içinde çift index numaralı nesneleri seç,
-checkbox kutularından “seçili” stiline sahip ilk nesneyi seç ya da üzerinde işlem yap

jquery seçiciler-filtreler

Metod Açıklama
$(a[name]); name özelliği olan linkleri seçer.
$(a[name=”anasayfa”]); name özelliği “anasayfa” olan linkeri seçer.
$(a[name^=”ana”]); name özelliği “ana” ile başlayan linkeri seçer.
$(a[name$=”sayfa”]); name özelliği “sayfa” ile biten linkeri seçer.
$(a[name!=”anasayfa”]); name özelliği “anasayfa” olmayan linkeri seçer.
$(a[name*=”say”]); name özelliği içinde “say” ifadesi geçen linkeri seçer.
Filtre Açıklama
:first index numarası 0 olan nesneyi seçer.İlk nesneyi seçer.
:last en son index numarasına sahip olan nesneyi seçer.Son nesneyi seçer.
:not belirtilen özelliğin değilini seçer.
:even Çift index numarasına sahip olan nesneleri seçer.0,2,4,6 gibi.
: odd tek index numarasına sahip olan nesneleri seçer.1,3,5,7 gibi.
:eq(4) 4 index numarasına sahip olan nesneyi seçer
:gt(4) 4 index numarasından büyük olan nesneleri seçer
:lt(4) 4 index numarasından küçük olan nesneleri seçer

MVC Attribute Kullanımı

MVC Attribute aşağıdaki gibi kullanabilirsiniz.

Filter  Interface  Default Implementation

 Authorization Filter  IAuthorizationFilter AuthorizeAttribute
 Action Filter  IActionFilter ActionFilterAttribute
 Result Filter  IResultFilter ActionFilterAttribute
 Exception Filter  IExceptionFilter HandleErrorAttribute

Authorization : Diğer filtreler ve Action metodlardan önce çalışmaktadır.Controller ya da Controller içindeki Action metoda erişim kısıtlamak için kullanılır.
Exception : Hata durumlarında çalışan filtredir.
Action : Herhangi bir Controller sınıfında bulunan Action metottan önce ya da sonra çalışır.
Result : Action Result çalıştırılmadan önce ya da çalıştırıldıktan sonra çalışır.

public class AttrDateSection : ActionFilterAttribute
{
    //Attribute olarak eklenen actiondan önce çalışacak methodumuz.
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    {
        filterContext.Controller.ViewData["selectdate"] = DateTime.Now;
        base.OnActionExecuting(filterContext);
    }
}

MVC Filters

MVC tasarım kalıbı ile birlikte bir taşla 2 kuş değil, 1 taşla 10 kuş vurmaya alıştık bu alışkanlığı en bariz şekilde hissetiren özelliklerin başında ise MVC’nin Filters özelliği geliyor.

Filters’lar adından da anlaşılacağı gibi web uygulamanıza gelen her bir isteğin arasına girip belirli evrelerinde ihtiyacınıza göre işlemler yapabileceğiniz mekanizmalardan oluşuyor. Bu mekanizmalar bazen sayfanın çalışma zamanının alınması, bazen de güvenliği sağlayan kontroller olabiliyor. İsterseniz tüm uygulamanız için, isterseniz de belirli istekler geldiğinde filitre uygulayabiliyorsunuz.

Filters’lar method’un başına birer özellik (Attiribute) olarak kullanılmaktadır ve ActionFilterAttribute sınıfından türetilmesi gerekmektedir. Daha sonrada ihtiyacımız olan olayları override edip rahatlıkla kullanabilmektesiniz.
Yazı bir işe yarasındiye basit bir senaryo belirleyip ona göre hareket ettim, bakalım filters’lar ile neler yapabiliyoruz.

Belirlediğim gaddar senaryoya göre web uygulamama internet explorer ile girişi yasaklamak istiyorum ve bunun içinde en iyi yol Global Filters’i kullanmak olduğunu biliyorum ve aşağıdaki gibi kendi filter’imi  oluşturuyorum.

using System.Web.Mvc;

namespace MvcApplication1.Models
{
public class CheckBrowserAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
}

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var userAgent = filterContext.HttpContext.Request.ServerVariables["HTTP_USER_AGENT"];
if (userAgent.IndexOf("MSIE") != -1)
filterContext.Result = new ContentResult()
{ Content = "<script>alert('YASAK! FireFox veya Chrome kullanın.');</script>" };

base.OnActionExecuting(filterContext);
}

public override void OnResultExecuted(ResultExecutedContext filterContext)
{
base.OnResultExecuted(filterContext);
}

public override void OnResultExecuting(ResultExecutingContext filterContext)
{
base.OnResultExecuting(filterContext);
}
}
}

Gördüğünüz gibi ActionFilterAttribute sınıfından miras aldığım 4 adet olay var. Bu olayları uzun,uzun anlatmaya gerek yok sanırım isimlerinden hangi sıra ile çalıştığı belli. Biz Controller’ımızın içindeki kod çalışmaya başlamadan önce browser kontrolünü yapacağımız için OnActionExecuting olayına kodumuzu ekleyeceğiz.

using System.Web.Mvc;

namespace MvcApplication1.Models
{
public class CheckBrowserAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
}

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var userAgent = filterContext.HttpContext.Request.ServerVariables["HTTP_USER_AGENT"];
if (userAgent.IndexOf("MSIE") != -1)
filterContext.Result = new ContentResult()
{ Content = "<script>alert('YASAK! FireFox veya Chrome kullanın.');</script>" };

base.OnActionExecuting(filterContext);
}

public override void OnResultExecuted(ResultExecutedContext filterContext)
{
base.OnResultExecuted(filterContext);
}

public override void OnResultExecuting(ResultExecutingContext filterContext)
{
base.OnResultExecuting(filterContext);
}
}
}

OnActionExecuting olayında ziyaretçinin user-agent bilgisinden browser’ının ne marka olduğunu öğrendik ve içinde “MSIE” stringi geçiyorsa ContentResult’u kullanarak bir JavaScript uyarısı çıkarttık. Ziyaretçinin user-agent değerinin içinde aradığımız string’i bulamasaydık Context Resul normal bir ViewActionResult() olarak gelecekti buda bize sayfayı doğru görmemizi sağlayacaktı.

Şimdi bunu filitrenin tüm Action’larda çalışmasını sağlamak için MVC uygulamamızın Global ActionFilter koleksiyonuna eklememiz gerekli. Bununda Global.asax dosyasından tek bir satır ile yapabiliyoruz. Global.asax dosyasını açtıktan sonra ilgili satırı aşağıdaki gibi ekleyin.

using System.Web.Mvc;
using System.Web.Routing;
using MvcApplication1.Models;

namespace MvcApplication1
{
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new CheckBrowserAttribute()); // <= Filitremiz
}

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

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

Bu işlemden sonra artık web uygulamamıza internet explorer’dan girilemeyecektir.

Gördüğünüz gibi hayatı kolaylaştıran bir özellik. Filitrelerin başka bir kullanım şeklide Action’a özel bir Attribute şeklindedir. Bunada bir senaryo üretip örnekleyelim.

Senaryoyu yine kullanıcı üzerinden geliştirmeye devam edip ziyaretçinin oturum açıp, açamadığını kontrol eden bir filter yazacağız. Senaryomuza çok ugun çünkü web uygulamalarında herkesin görebileceği ve sadece üyelerin görebileceği yerler olmakta.

using System.Web.Mvc;

namespace MvcApplication1.Models
{
public class LoginRequiredAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.HttpContext.Session["isLogIn"] == null)
filterContext.Result = new RedirectResult("~/Home/Login");

base.OnActionExecuting(filterContext);
}
}
}

Burda görüldüğü gibi basit bir Session kotrolünden başka bir şey yapmıyoruz, esas olay Action’a eklediğim Attribute ile gerçekleşiyor.

[LoginRequired]
public ActionResult Users()
{
return View();
}

Action’ın üzerine LoginRequired filitremizi koyduktan sonra bu action’a yapılan her istekte session kontrol edilecek, yoksa ziyaretçinin giriş yapması istenecektir. Ek olarak dikkat ederseniz .Net’te örf ve adetler gereği ile LoginRequiredAttribute yerine sadece LoginRequired yazabiliyoruz. tıpki Interface’lerin I ile başlaması geleneği gibi.

Alındır, http://blog.oguzhan.info/?p=36