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

使用Rotativa的ViewAsPdf时无法加载模型视图的问题求助

解决.NET 7 MVC中Rotativa导出PDF时视图数据加载问题

问题根源

你的ConvertToPdf Action直接使用_listUsers字段,但该字段仅在ListUsers Action执行时才会赋值。由于HTTP请求是无状态的,点击导出链接发起的ConvertToPdf请求会创建新的控制器实例,此时_listUsers为null,导致空引用异常。

解决方案

1. 提取公共数据加载逻辑,让ConvertToPdf自行加载数据

将用户列表的加载逻辑抽成独立方法,让两个Action都调用该方法,确保ConvertToPdf能获取到数据:

// 控制器内新增公共数据加载方法
private async Task<List<User>> GetUsersAsync()
{
    return await _context.Users.ToListAsync();
}

// 修改ListUsers Action
public async Task<IActionResult> ListUsers()
{
    var users = await GetUsersAsync();
    return View(users);
}

// 修改ConvertToPdf Action为异步,并自行加载数据
public async Task<IActionResult> ConvertToPdf()
{
    var users = await GetUsersAsync();
    return new ViewAsPdf("ListUsers", users);
}

2. 修正前端导出链接

原链接传递的html参数无意义,直接调用ConvertToPdf即可:

<a href="@Url.Action("ConvertToPdf", "Home")">Convert to PDF</a>

关键说明

  • HTTP请求是无状态的,控制器实例随每个请求创建,不能依赖其他请求中赋值的字段传递数据。
  • 让导出Action自行加载数据,是最可靠的方式,避免因请求上下文不同导致的数据丢失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 21:46:01