2010-10-19 62 views
1

有没有人知道我如何截取页面的HTML并阻止它回到客户端?在ASP.Net中拦截HTTP MVC 2

我试过以下,在一个控制器方法:

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,然后返回。

回答

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(); 
     } 
    } 
+0

看起来有前途的感谢 - 我给一个去! – 2010-10-20 13:09:07