public override void Render(System.Web.Mvc.ViewContext viewContext, System.IO.TextWriter writer) { var focus = (IView)null; ResponseType responseType = ResponseType.None; var routeData = viewContext.RouteData.Values; object tempObj; if (routeData.TryGetValue("responseType", out tempObj) && tempObj is ResponseType) { responseType = (ResponseType)tempObj; } if (responseType == ResponseType.None) { responseType = ServiceHelper.GetResponseType(viewContext); } switch (responseType) { case ResponseType.JavaScript: focus = new JavaScriptCallbackResult(); break; case ResponseType.Json: focus = new JsonView(); break; case ResponseType.Xml: focus = new XmlView(); break; case ResponseType.Csv: focus = new CsvResult(); break; case ResponseType.Html: default: focus = viewContext.View; break; } if (focus is SerializedView) { ServiceHelper.CopyProperties(this, (SerializedView)focus); } if (focus != null) { focus.Render(viewContext, writer); } }
/// <summary> /// Called when [action executed]. /// </summary> /// <param name="filterContext">The filter context.</param> public override void OnActionExecuted(ActionExecutedContext filterContext) { if (filterContext != null && filterContext.Exception != null && ExceptionResult != null) { var result = Activator.CreateInstance(ExceptionResult) as ISerializableExceptionResult; result.ExceptionMessage = filterContext.Exception.Message; result.Exception = filterContext.Exception; if (filterContext.Exception is HttpException) { result.ModelSerializer.StatusCode = (filterContext.Exception as HttpException).GetHttpCode(); result.ModelSerializer.StatusDescription = ((HttpStatusCode)result.ModelSerializer.StatusCode).ToString().FromPascalCase(); } filterContext.Result = result as ActionResult; filterContext.ExceptionHandled = true; } if (filterContext.Result is ViewResult) { var result = filterContext.Result as ViewResult; var view = result.View as SerializedView; switch ((ResponseType)filterContext.RouteData.Values["responseType"]) { case ResponseType.JavaScript: result.View = new JavaScriptCallbackResult(); break; case ResponseType.Json: result.View = new JsonView(); break; case ResponseType.Xml: result.View = new XmlView(); break; case ResponseType.Csv: result.View = new CsvResult(); break; case ResponseType.Html: default: break; } if (result.View is SerializedView && view != null) { ServiceHelper.CopyProperties(view, (SerializedView)result.View); } } else if (filterContext.Result is ISerializableActionResult && !typeof(SerializedResult).IsAssignableFrom(filterContext.Result.GetType())) { ISerializableActionResult result = filterContext.Result as ISerializableActionResult; switch ((ResponseType)filterContext.RouteData.Values["responseType"]) { case ResponseType.JavaScript: case ResponseType.Json: case ResponseType.Xml: case ResponseType.Csv: var resultX = new SerializedResult(result.Model); ServiceHelper.CopyProperties(result.ModelSerializer, resultX.ModelSerializer); break; case ResponseType.Html: default: filterContext.Result = (ActionResult)result; break; } } }