asp.net-mvc-2 - 如何处理asp.net mvc错误并使用 Controller 中的同一 View ?

标签 asp.net-mvc-2 error-handling tempdata

我有这样的 Action :

[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]处理方式,而不是在发生错误的情况下将用户重定向到另一个 View ,它会以TempData [“error”]返回给我相同的 View ,并且通知将显示在在同一页面的顶部。

我该怎么做,删除所有try {} catch {}代码,并将此逻辑放在该操作之外,以及其他操作?

最佳答案

您应该可以使用[HandleError]和OnException做您想要的事情。例如,显示自定义 View :

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

关于asp.net-mvc-2 - 如何处理asp.net mvc错误并使用 Controller 中的同一 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4269589/

相关文章:

asp.net - DropDownList 的 MVC2 编辑器模板

testing - 如何编写测试插头错误处理

c# - “Tempdata”在当前上下文中不存在

asp.net-mvc - "The Id field is required"创建时的验证消息; ID 未设置为 [必填]

c# - 无法转换类型为 'WhereListIterator` 的对象 1[Web.Model.Appointment ]' to type ' Web.Model.Appointment'

c# - MongoDB:是否可以在文档中使用第二个 objectID 以用于更新的并发检查?

bash - 如何在 if 语句中捕获错误

c - 在 C 中创建大小在运行时决定的数组时出错

asp.net-mvc - TempData 始终为空

asp.net-mvc - asp.net mvc - 检测页面刷新