2013-10-25 36 views
0

我有CustomHandleErrorAttribute其中i覆蓋OnException方法是這樣的:嘗試在網頁上停留時所預期的異常被拋出

public override void OnException(ExceptionContext filterContext) { 
     if (!filterContext.ExceptionHandled) { 
      if (filterContext.HttpContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest") { 
       filterContext.Result = new JsonResult { 
        JsonRequestBehavior = JsonRequestBehavior.AllowGet, 
        Data = new { 
         error = true, 
         message = filterContext.Exception.Message 
        } 
       }; 
      } 
      else { 
       var controllerName = (string)filterContext.RouteData.Values["controller"]; 
       var actionName = (string)filterContext.RouteData.Values["action"]; 
       var model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName); 

       filterContext.Result = new ViewResult { 
        ViewName = View, 
        MasterName = Master, 
        ViewData = new ViewDataDictionary<HandleErrorInfo>(model), 
        TempData = filterContext.Controller.TempData 
       }; 
      } 
     } 
    } 

我可以通過AJAX請求例外,雖然我Action的處理。

我有一個問題,當拋出異常(例如/Customers/Customer/1頁),我有yellow screenServer Error in '/' Application,但我想,以顯示我的觀點,並傳遞給有關的異常處理ViewData信息,然後在此頁上顯示(不要重定向到CustomErrorPage或其他任何地方)。

所以: 1.如果我有異常 - 只顯示沒有窗體的異常信息; 2.如果我沒有異常顯示錶單;

是否有可能或拋出的異常無法繼續處理操作並顯示相同的視圖?

Thx。

回答

1

當你允許一個異常直到IIS級別的異常而不被捕獲時,你會得到死亡的黃色屏幕。這會變成500服務器錯誤,如果你設置了一個,你會看到黃色的屏幕或500錯誤頁面。沒有其他可顯示的內容,因爲無法從錯誤中恢復。

獲得相同視圖加載的唯一方法是捕獲每個異常並以某種方式對其進行響應。這可能會在視圖或其他內容上爲用戶生成錯誤消息,但是由您來捕捉異常並做出響應,IIS不會爲您執行此操作。

相關問題