2010-10-19 63 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