Попытка передать строку json в представление ActionResult из ActionAsPdf с использованием rotativa - PullRequest
0 голосов
/ 26 июня 2019

Итак, у меня есть контроллер, который создает 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.

Спасибо

...