使用异常过滤器显示自定义消息而不破坏页面

时间:2017-12-28 11:31:39

标签: asp.net-mvc-4

我正在使用一个MVC应用程序,我必须处理代码中发生的所有异常。我发现了异常过滤器并在那里实现。以下是创建的异常过滤器代码:

public class HandleException : HandleErrorAttribute
{
        #region Log Initialization
        FileLogService logService = new 
        FileLogService(typeof(HandleException));
        #endregion
        public override void OnException(ExceptionContext filterContext)
        {
            filterContext.ExceptionHandled = true;
            Log(filterContext.Exception);
            base.OnException(filterContext);
        }

        private void Log(Exception exception)
        {
            logService.Error(exception.ToString());
        }
 }

现在我在我的控制器中使用此过滤器作为属性,如下所示:

[AuthSession]
    [HandleException]
    public class OrganizationalController : BaseController
    {
       
        public ActionResult OrgSummary()
        {
            try
            {
                int a = 1, b = 0;
                int result = a / b;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            ViewData["ShowGrid"] = false;
            return View();
        }
   }

正如您在上面的代码中看到的,我试图在代码中生成异常。在catch异常块中,当我使用throw关键字时,异常过滤器将被执行,否则不会。

现在我需要在应用程序中发生任何异常时我需要为用户显示自定义弹出消息。在弹出消息中,一旦用户单击“确定”按钮,则用户应该在同一页面上可用。该页面不应该中断或变空。

我该如何实现此功能?

1 个答案:

答案 0 :(得分:0)

试试这段代码。可能有帮助

public class MyExceptionFilter: FilterAttribute, IExceptionFilter   
 {  
public void OnException(ExceptionContext filterContext)   
{  
     // below code will redirect to the error view
        filterContext.Result = new RedirectResult("ErrorPage.html");  
        filterContext.ExceptionHandled = true;  

}  
}

然后您需要将上述属性应用于您的操作方法,例如:     [MyExceptionFilter]
public ActionResult XYZ() { }