2013-07-12 52 views
0

我有一個類運行一些功能,偶爾發生錯誤,我想重定向到我的errorController,但不能,因爲這是在一個單獨的類。自定義RedirectToAction。從課堂重定向?

有沒有辦法我可以使用redirectToAction或類似的東西移動到我的errorContorller?

我試過這個,但無法重定向,它只是運行代碼而沒有發生任何事情。

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

現在你可以使用這個Action Filter完整Controller或徘徊無論你面對的問題(控制水平或行動方法級)的特定Action Method

控制器級別

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

這將被應用到一個的Cont5roller所有操作方法


操作方法等級

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

這將被施加到Cont5roller的特定處理法