asp.net-mvc - 尝试使用 rotativa 将 json 字符串从 ActionAsPdf 传递到 ActionResult 视图
问题描述
所以我有一个控制器,它使用多个视图构建 pdf,每个视图构建 pdf 的特定部分。
我正在传递 pdfdata ,它是一个 json 字符串,其中包含视图需要的所有数据到 ActionAsPdf 中,如下所示
private byte[] CreateCertificatePart(CertificatePart part, string pdfdata)
{
var customSwitches = string.Format(
"--print-media-type " +
"--margin-top 10mm " +
"--margin-bottom 10mm " +
"--margin-left 10mm " +
"--margin-right 10mm " +
"--encoding utf-8 " +
"--minimum-font-size 11 " +
"--zoom 1.0 " +
"--disable-smart-shrinking"
);
var viewname = part.ToString();
var pdfResult = new ActionAsPdf(viewname,pdfdata) { CustomSwitches = customSwitches };
var pdfBytes = pdfResult.BuildFile(ControllerContext);
return pdfBytes;
}
然后 Action 结果调用由 ActionAsPdf 转换为 pdf 字节的剃刀视图。
public ActionResult CertificateBody(string pdfdata)
{
var data = new PdfData();
try
{
data = JsonConvert.DeserializeObject<PdfData>(pdfdata);
return View(data.PdfBodyName, data.CertModel);
}
catch (Exception ex)
{
AppInsightLog.LogError(ex, $"NewCertificateBody{data.CertModel.Schedule.QuoteReference}");
return new HttpStatusCodeResult(400, "NewCertificateBody");
}
}
问题是 pdfData 始终为空!这是 CreateCertificatePart 中很长的 json 字符串。我最初尝试传递一个模型,但这也是空的,这就是为什么我试图传递一个字符串而不是认为这样就可以了。
如果我传递一个非常简单的字符串(如“hello”或整数)就可以了,所以我可以传递一个 ID,但我不想在操作结果方法中进行数据库调用.. 因为那样我会多次调用相同的调用.
CreateCertificatePart 是递归的,但所有不同的视图都需要相同的模型,即 PdfData。
谢谢
解决方案
推荐阅读
- excel - VBA 暗淡对象错误
- linkedin - Linkedin 资产 complete_multipartUpload api 抛出 401
- python - 如何从保存的 Dynet 模型中读回“随机种子”
- google-api - 从 Google 分析核心报告 API 中提取不同的值
- react-native-android - 反应本机按钮中的阴影
- scala - 从 spark 写入 hadoop 的最佳实践
- bash - 在bash中将前100k文件夹从一个目录复制到另一个目录的最快方法是什么
- apache - mod_brotli 和 apache 2.4.33 的编译问题
- android - ndk 套接字在 snapdragon 835 上不起作用
- maven - 我在 Android Studio 中出现 gradle 同步错误,“找不到参数 [com.github.dcendents:android-maven-gradle-plugin:2.0] 的方法 calsspath()”