2013-07-12 1 views
0

나는 어떤 함수를 실행하는 클래스를 가지고 있으며 때로는 에러가 발생한다. errorController로 리다이렉트하고 싶지만 별도의 클래스에있을 수 없다.사용자 지정 리디렉션 작업. 수업에서 리디렉션 하시겠습니까?

redirectToAction이나 비슷한 것을 사용하여 내 errorContorler로 이동할 수있는 방법이 있습니까?

나는 이것을 시도했지만 리다이렉트 할 수 없었고, 코드를 실행했지만 아무 일도 일어나지 않았다.

public ActionResult Error(Dictionary<string, string> findError) 
{ 
    TempData["Error"] = findError.Keys.First(); 
    TempData["ErrorMessage"] = findError.Values.First(); 
    return RedirectToAction("Error", "CustomError"); 
} 

ErrorController는 :

namespace MvcResComm.Controllers 
{ 
    public class CustomErrorController : Controller 
    { 
     // 
     // GET: /Error/ 

     public ActionResult Index() 
     { 
      return View(); 
     } 

     public ActionResult Error() 
     { 
      string message = (string)TempData["ErrorMessage"]; 
      string ex = (string)TempData["Error"]; 
      ViewBag.Message = "Error"; 
      return View(new ErrorModel(ex, message)); 
     } 
    } 
} 
+0

몇 가지 코드를 보여주십시오. –

+0

가장 가능성있는 방법이있을 수 있지만 클래스, 컨트롤러 및 해당 관계에 따라 다릅니다. 코드를 공유 할 수 있습니까? – Andrei

답변

0

이 나를 위해 작동합니다.

액션 필터

public class HandleCustomErrorAttribute : System.Web.Mvc.HandleErrorAttribute 
{ 
    public override void OnException(System.Web.Mvc.ExceptionContext filterContext) 
    { 
     filterContext.ExceptionHandled = true; 

      var routeData = new RouteData(); 
      routeData.Values["controller"] = "Controller Name"; 
      routeData.Values["action"] = "Action Method Name"; 
      routeData.DataTokens["area"] = "Area Name"; // Optional 

      IController errorsController = new Controllers.ErrorController(); 
      var rc = new RequestContext(new HttpContextWrapper(HttpContext.Current), 
                      routeData); 
      errorsController.Execute(rc); 

     base.OnException(filterContext); 
    } 
} 

이제 완전한 Controller 또는 당신이 문제 (컨트롤러 레벨 또는 작업 방법 레벨)에 직면 해있다 whereever 특정 Action MethodAction Filter을 사용할 수 있습니다.

컨트롤러 레벨

[HandleCustomError(Order = 5)] 
public class MyController : Controller 
{ 
} 

이것은 Cont5roller 모든 동작 방법인가한다.


동작 방법 레벨

public class MyController : Controller 
{ 
    [HandleCustomError(Order = 5)] 
    public ActionResult ActionMethod() 
    { 
     //Some code 
    } 
} 

이것은 Cont5roller 의 특정 작업 방법에 적용한다.