2012-11-09 2 views
6

컨트롤러 기능 위에 [FirstTime] 특성을 넣은 다음 사용자가 그의 이름을 입력했는지 여부를 확인하는 논리가있는 FirstTimeAttribute을 만들고 싶지 않은 경우이를 /Home/FirstTime으로 리디렉션합니다.컨트롤러 기능 위의 사용자 지정 속성

그래서 대신 일 :

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

    return View(); 
} 

나는 다만 것 :

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

이 가능합니까?

답변

10

확실히.

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 
      } 
     } 
    } 
} 

그런 짓을 그리고 당신의 행동에 [FirstTime] 속성을 사용

+0

최고, 감사합니다 순전히. 'filterContext.Result = new RedirectResult (...);'...을 추가 한 후 매력처럼 작동했습니다 ... 감사합니다! – Gaui

+1

기꺼이 도와 드리겠습니다. 처음부터 추가하지 못해 죄송합니다. 내 마음을 바꿨다. (다른 것에서 작업하기) – Mihai

0

속성 코드 :

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 } 
              }); 
       } 
      } 
    } 

사용법 :

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

IActionFilter를 구현하는 것은 불필요하다. ActionFilterAttribute는 이미이 인터페이스를 구현하고 FirstTimeAttribute는 ActionFilterAttribute에서 상속받습니다. :) – Mihai