0

我有这样的动作:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult New(Product product)
{
    try
    {
        if(ModelState.IsValid)
        {
            _productService.Create(product);
            TempData["success"] = "Product created successfully!";
            return RedirectToAction("Edit", new { product.Id });
        }
    }
    catch (Exception e)
    {
        Logger.Exception(e);
        TempData["error"] = "Oops, an error occurred! Please try again in a few moments.";
    }

    return View(product);
}

我想把这个错误处理逻辑从方法中去掉。但是,它不是默认的 [HandleError] 处理方式,而是在发生错误时将用户重定向到另一个视图,而是返回带有 TempData["error"] 的相同视图,并且通知将出现在同一页的顶部。

我怎么能这样做,删除所有这些 try{}catch{} 代码并将这个逻辑放在这个动作之外,也适用于其他动作?

4

1 回答 1

0

你应该能够使用 [HandleError] 和 OnException 来做你想做的事。例如,显示自定义视图:

protected override void OnException(ExceptionContext filterContext)
{
        // Output a nice error page
        if (filterContext.HttpContext.IsCustomErrorEnabled)
        {
                filterContext.ExceptionHandled = true;
                this.View("Error").ExecuteResult(this.ControllerContext);
        }
}

不久前,我在我的博客上发布了更多关于此的信息:

http://blog.dantup.com/2009/04/aspnet-mvc-handleerror-attribute-custom.html

于 2011-02-23T18:33:18.203 回答