有没有人知道我如何拦截页面的HTML并阻止它被渲染回客户端?
我在控制器方法中尝试了以下内容:
var writer = new StringWriter();
var response = new HttpResponse(writer);
var context = new HttpContext(existingContext.Request, response) { User = existingContext.User };
System.Web.HttpContext.Current = context;
//The method controller method returning an ActionResult for the page I want to render
var ViewResult = ControllerMethod();
ViewResult.ExecuteResult(this.ControllerContext);
string html = writer.ToString();
我认为在这一点上,html字符串应该包含已经呈现的页面的HTML。就目前而言,html变量是一个空字符串。我怀疑这是因为设置System.Web.HttpContext.Current不会影响控制器的HTTP上下文。这是一个可能的原因,如果有的话,是否有一个批准的方法来设置上下文,因为该属性是只读的?
我正在尝试通过捕获正在创建的原始HTML并将其传递给第三方组件来将页面呈现为PDF。然后,包含上述代码的控制器操作将获取原始HTML并将其转换为PDF,然后返回。
答案 0 :(得分:2)
使用以下内容将视图呈现为字符串 - 然后可以将其传递给PDF生成器
string RenderViewToString(string viewName, object model, string masterName)
{
if (string.IsNullOrEmpty(viewName))
viewName = ControllerContext.RouteData.GetRequiredString("action");
ViewData.Model = model;
using (StringWriter sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindView(ControllerContext, viewName, masterName);
ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}