Итак, у меня есть контроллер, который создает 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;
}
Тогда результат действия вызывает представление бритвы, которое с помощью 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 всегда нулевой! это была очень длинная строка json в CreateCertificatePart. Первоначально я попытался передать модель, но это также было нулевым, поэтому я пытаюсь передать строку вместо этого, думая, что все будет в порядке.
Это нормально, если я передаю очень простую строку, такую как "привет" или целое число, поэтому я могу передать идентификатор, но я не хочу делать вызов базы данных в методе результата действия ... потому что тогда я сделаю то же самое позвоните несколько раз.
CreateCertificatePart является рекурсивным, но для всех различных представлений требуется одна и та же модель, которая является PdfData.
Спасибо