2012-11-09 24 views
6

[FirstTime] özelliğin üstünde Özellik ve sonra kullanıcı adını girip girmediğini kontrol bazı mantık vardır ve o değil varsa /Home/FirstTime onu yönlendiren bir FirstTimeAttribute oluşturun.Özel bir denetleyici fonksiyonu üzerinde bir denetleyici ben koymak istiyorum fonksiyonu

Yani yerine yapıyor:

public ActionResult Index() 
{ 
    // Some major logic here 
    if (...) 
     return RedirectToAction("FirstTime", "Home"); 

    return View(); 
} 

yapmam sadece olacaktır:

[FirstTime] 
public ActionResult Index() 
{ 
    return View(); 
} 

bu mümkün mü?

cevap

10

Elbette.

public class FirstTimeAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     if(filterContext.HttpContext.Session != null) 
     { 
      var user = filterContext.HttpContext.Session["User"] as User; 
      if(user != null && string.IsNullOrEmpty(user.FirstName)) 
       filterContext.Result = new RedirectResult("/home/firstname"); 
      else 
      { 
       //what ever you want, or nothing at all 
      } 
     } 
    } 
} 

gibi bir şey yapın Ve sadece eylemler [FirstTime] özellik kullanmak

+0

Müthiş, teşekkür ederim çok fazla. 'FilterContext.Result = new RedirectResult (...); '... ekledikten sonra bir çekicilik gibi çalıştı. – Gaui

+1

Sevindim Yardımcı olabilirim. Bunu ilk etapta eklemediğim için üzgünüm; aklımda kayar (başka bir şey üzerinde çalışıyor) – Mihai

0

Özellik kodu:

public class FirstTimeAttribute : ActionFilterAttribute, IActionFilter 
     { 
      public override void OnActionExecuting(ActionExecutingContext filterContext) 
      { 
       if (string.IsNullOrEmpty(filterContext.HttpContext.Request[name])) 
       { 
        filterContext.Result = new RedirectToRouteResult("Default", new RouteValueDictionary 
              { 
               { "controller", "Home" }, 
               { "action", "FirstTime" }, 
               { "area", string.Empty } 
              }); 
       } 
      } 
    } 

Kullanımı:

[FirstTime] 
public ActionResult Index(string name) 
{ 
    return View(); 
} 
+0

Implementing IActionFilter gereksizdir. ActionFilterAttribute zaten bu arabirimi uygular ve FirstTimeAttribute ActionFilterAttribute öğesinden devralır :) – Mihai