因此,我有一个使用多个视图构建pdf的控制器,每个视图都构建pdf的特定部分。
我正在传递pdfdata,它是一个json字符串,其中包含视图所需的所有数据,像这样
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结果调用razor视图,该视图由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。
谢谢