You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中转换含jQuery动态数据的视图页为PDF?

解决C#中含绑定数据的视图页转PDF问题

问题根源

你目前用client.DownloadString(path)获取HTML的方式,若path指向的是未经过服务器视图引擎处理的视图文件(比如直接访问.cshtml物理路径),或者没有触发控制器Action完成数据绑定与视图渲染,自然只能拿到静态模板内容,无法获取填充了动态数据的完整页面。

可行解决方案

方案1:在ASP.NET MVC中直接渲染视图为带数据的HTML

如果是ASP.NET MVC项目,可通过编写工具方法让服务器先完成视图与数据的绑定渲染,再拿到完整HTML字符串转PDF:

// 工具方法:将指定视图与模型渲染为HTML字符串
public string RenderViewToHtml(string viewName, object model, ControllerContext controllerContext)
{
    controllerContext.ViewData.Model = model;
    
    using (var stringWriter = new StringWriter())
    {
        var viewResult = ViewEngines.Engines.FindView(controllerContext, viewName, null);
        var viewContext = new ViewContext(controllerContext, viewResult.View, controllerContext.ViewData, controllerContext.TempData, stringWriter);
        
        viewResult.View.Render(viewContext, stringWriter);
        viewResult.ViewEngine.ReleaseView(controllerContext, viewResult.View);
        
        return stringWriter.ToString();
    }
}

// 使用示例:
// 1. 准备要绑定的数据模型
var yourDataModel = new YourDataModel 
{
    // 填充模型数据
};

// 2. 渲染视图为带数据的HTML
string dynamicHtml = RenderViewToHtml("YourTargetView", yourDataModel, this.ControllerContext);

// 3. 转换为PDF
var pdf = TheArtOfDev.HtmlRenderer.PdfSharp.PdfGenerator
    .GeneratePdf(dynamicHtml, PdfSharp.PageSize.A4);

方案2:修正DownloadString的请求路径

如果你坚持用DownloadString,必须确保path是控制器Action的完整访问URL(而非视图文件路径)。这样服务器会先执行Action中的数据绑定逻辑,返回已经渲染好动态数据的页面:

// 替换为你的控制器Action的完整URL
string path = "http://your-app-domain/YourController/YourAction";
String htmlCode = client.DownloadString(path);

var pdf = TheArtOfDev.HtmlRenderer.PdfSharp.PdfGenerator
    .GeneratePdf(htmlCode, PdfSharp.PageSize.A4);

额外注意点

  • 确认你的数据模型已正确填充,且Action方法中已将模型传递给View
  • 若视图中引用了CSS、图片等资源,需确保HTML渲染器能正常访问:要么转为内联资源,要么使用绝对路径引用

内容的提问来源于stack exchange,提问作者Thomas Jeevithan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 11:36:00