public override void ExecuteResult(ControllerContext context) { if (context == null) { throw new ArgumentNullException("context"); } if (string.IsNullOrEmpty(this.ViewName)) { this.ViewName = ExecuteViewResult.GetViewName(context); } base.ExecuteResult(context); }
public override void ExecuteResult(ControllerContext context) { if (String.IsNullOrEmpty(ViewName)) { //ViewName = context.RouteData.GetRequiredString("action"); this.ViewName = ExecuteViewResult.GetViewName(context); } if (ViewData == null) { ViewData = context.Controller.ViewData; } ViewEngineResult result = ViewEngines.Engines.FindView(context, ViewName, null); IView View = result.View; if (View == null) { throw new Exception("未找到视图:" + ViewName); } StringBuilder sbHtml = new StringBuilder(); TextWriter txtWriter = new StringWriter(sbHtml); ViewContext viewContext = new ViewContext(context, View, ViewData, context.Controller.TempData, txtWriter); result.View.Render(viewContext, txtWriter); HttpResponseBase httpResponse = context.HttpContext.Response; httpResponse.ContentType = System.Net.Mime.MediaTypeNames.Application.Pdf; //是否直接下载pdf文件,或者在浏览器中预览呈现 string attachment = (IsDownload ? "attachment;": ""); FileName = string.IsNullOrEmpty(FileName) ? context.RouteData.GetRequiredString("action") : FileName; context.HttpContext.Response.AppendHeader("Content-Disposition", string.Format("{1}filename={0}.pdf", FileName, attachment)); HtmlToPdf(sbHtml, httpResponse); result.ViewEngine.ReleaseView(context, View); }