如何在.NET Core 6 Razor Pages中显示FastReport报表
在.NET Core 6 Razor Pages中显示FastReport报表
解决这个问题的核心是利用Razor Pages的PageModel属性传递报表对象,再在页面中调用FastReport的Web渲染方法。具体步骤如下:
1. 配置FastReport服务
首先在Program.cs中注册FastReport的服务和中间件,确保Web环境能处理报表渲染:
var builder = WebApplication.CreateBuilder(args); // 注册FastReport服务 builder.Services.AddFastReport(); builder.Services.AddRazorPages(); var app = builder.Build(); // 启用FastReport中间件 app.UseFastReport(); // 其他中间件配置 app.UseStaticFiles(); app.UseRouting(); app.MapRazorPages(); app.Run();
2. 在PageModel中处理报表逻辑
在对应的PageModel类中,添加用于存储Web报表对象的公共属性,然后在请求方法(如OnGet)中完成报表的加载和数据注册:
using FastReport; using FastReport.Web; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.FileProviders; namespace YourProjectNamespace.Pages; public class ConsumerStatementModel : PageModel { private readonly IWebHostEnvironment _env; // 定义公共属性,供页面访问 public WebReport WebReport { get; set; } public ConsumerStatementModel(IWebHostEnvironment env) { _env = env; } public void OnGet() { // 替换为你的实际数据源 var data = GetConsumerData(); using var report = new Report(); var reportPath = _env.WebRootFileProvider.GetFileInfo("Reports/ConsumerStatement.frx")?.PhysicalPath; report.Load(reportPath); report.RegisterData(data, "RefData"); // 初始化WebReport,关联已加载的报表 WebReport = new WebReport(); WebReport.Report = report; } // 示例:获取数据源的方法 private object GetConsumerData() { // 这里返回你的实际数据集合,比如List<Consumer> return new List<object>(); } }
3. 在Razor页面中渲染报表
在对应的.cshtml页面中,直接调用WebReport的Render()方法生成报表HTML:
@page @model YourProjectNamespace.Pages.ConsumerStatementModel @{ ViewData["Title"] = "消费对账单"; } <h2>消费对账单报表</h2> @* 渲染FastReport报表 *@ @model.WebReport.Render()
补充说明
- 相比TempData/ViewData,直接在PageModel中定义属性是更稳妥的方式,避免大对象序列化的问题。
- 确保
Reports/ConsumerStatement.frx文件存在于wwwroot目录下,否则WebRootFileProvider无法找到。
内容的提问来源于stack exchange,提问作者Rehan Khan
相关产品推荐
相关产品推荐

