【问题标题】:Custom RedirectToAction. Redirect from class?自定义重定向操作。从课堂重定向?
【发布时间】:2013-07-10 20:09:04
【问题描述】:

我有一个类正在运行一些函数,有时会发生错误,我想重定向到我的 errorController 但不能,因为这是在单独的类中。

有没有办法我可以使用 redirectToAction 或类似的东西来移动到我的 errorContorller?

我试过了,但无法重定向,它只是通过代码运行,没有任何反应。

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

错误控制器:

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

【问题讨论】:

  • 很可能有办法,但这取决于类、控制器及其关系。你能分享他们的代码吗?

标签: c# asp.net-mvc-3 redirecttoaction


【解决方案1】:

这对我有用。

动作过滤器

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 的特定操作方法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 1970-01-01
    • 2017-01-03
    相关资源
    最近更新 更多