- PartialViewResult is returning view with master page
- [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
- public class IcpHandleErrorAttribute : FilterAttribute, IExceptionFilter
- {
- private readonly Type _exceptionType = typeof(Exception);
- public IcpHandleErrorAttribute()
- {}
- public void OnException(ExceptionContext filterContext)
- {
- if (filterContext == null)throw new ArgumentNullException("filterContext");
- if (filterContext.IsChildAction)return;
- if (filterContext.ExceptionHandled || !filterContext.HttpContext.IsCustomErrorEnabled)return;
- Exception exception = filterContext.Exception;
- if (new HttpException(null, exception).GetHttpCode() != 500)return;
- if (!_exceptionType.IsInstanceOfType(exception))return;
- var controllerName = (string)filterContext.RouteData.Values["controller"];
- var actionName = (string)filterContext.RouteData.Values["action"];
- var model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName);
- ViewResultBase result;
- if (filterContext.HttpContext.Request.IsAjaxRequest())
- {
- result = new PartialViewResult { ViewName = "ErrorAjax" };
- }
- else
- {
- result = new ViewResult{ViewName = "Error"};
- }
- result.ViewData = new ViewDataDictionary<HandleErrorInfo>(model);
- result.TempData = filterContext.Controller.TempData;
- filterContext.ExceptionHandled = true;
- filterContext.HttpContext.Response.Clear();
- filterContext.HttpContext.Response.StatusCode = 500;
- filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
- }
- }
- @model HandleErrorInfo
- @{
- Layout = null;
- }
- <div class="error">@Model.Exception.Message</div>
- [HttpPost]
- public ActionResult Create(ProjectCreateCommand command)
- {
- throw new NotImplementedException("ajax");
- return Post(command);
- }
- GlobalFilters.Filters.Add(new IcpHandleErrorAttribute());
- RegisterGlobalFilters(GlobalFilters.Filters);
- filterContext.Result = result;