title: Problem with generic base controller error handling in ASP.NET MVC
body: <p>I've got a catchall in my base controller that handles errors I don't catch.  It goes roughly like this:</p>
  
  <pre><code>protected override void OnException(ExceptionContext filterContext)
  {
      // Bail if we can't do anything
      if (filterContext == null)
          return;
  
      // log
      var ex = filterContext.Exception ??
              new Exception("No further information exists.");
      LogException(ex);
  
      filterContext.ExceptionHandled = true;
      var data = new ErrorPresentation
          {
          ErrorMessage = HttpUtility.HtmlEncode(ex.Message),
          TheException = ex
          };
      filterContext.Result = View("Error", data);
      base.OnException(filterContext);
  }
  </code></pre>
  
  <p>Now this works great if the error happens <strong>in the controller</strong>.  The issue is that if the error is <strong>during the aspx page rendering</strong> (say, in an HtmlHelper method), the <em>whole</em> error view gets rendered, <strong>in place on the page where the error occurred</strong>.  That means that the entire error page (MasterPage and all) gets rendered within the page that's errored.  Not exactly the expected behavior.</p>
  
  <p>I've tried changing View to a RedirectToAction, but that won't work as a route doesn't exist for every controller (Home/Error, Configuration/Error, etc).</p>
  
  <p>How can I get this to work for both errors in the controller AND errors on the page?</p>