Rotativa - controllercontext 为空

Rotativa - controllercontext is null

我使用 ASP.NET MVC,我尝试使用 rotativa 按模型构建 pdf。 问题是,在这种情况下,我在一个模型中操作(我无法在控制器中移动代码),并且我将一个过程写入控制器以构建 pdf。像这样

        MODEL:

        ModelNIR modelloNIR = new ModelNIR();
        modelloNIR.ufficio = Ufficio;
        if (r != null)
        {
            modelloNIR.ruolo = r.Descrizione.ToUpper();
            //pdfFormFields.SetField("RUOLO", r.Descrizione.ToUpper());
            //pdfFormFields.SetField("RUOLO2", "RUOLO " + r.Descrizione.ToUpper());
        }


        if (atto.IdTipoParte == 1)
            modelloNIR.convenuto = 1;
        if (atto.IdTipoParte == 2)
            modelloNIR.ricorrente = 1;


        if (atto.IdTipoAtto == 1)
            modelloNIR.citazione = 1;
        if (atto.IdTipoAtto == 2)
            modelloNIR.altro = 1;
        if (atto.IdTipoAtto == 3)
            modelloNIR.ricorso = 1;

        if (Contributo != "")
            Contributo = "Euro " + Contributo;
        else
            Contributo = "Esente";

        modelloNIR.valoreCausa = "Euro " + valoreCausa;
        modelloNIR.contributo = Contributo;
        modelloNIR.oggetto = oggetto;

        if (ControparteNew == "") ControparteNew = Controparte;
        modelloNIR.promosso = Promossoda;
        modelloNIR.contro = ControparteNew;

        NotificheMezzoPecsController not = new NotificheMezzoPecsController();
        // call controller action
        MemoryStream nir = not.createPDFNIR(modelloNIR);

这是控制器的动作

        CONTROLLER:
        public MemoryStream createPDFNIR(ModelNIR modelloNIR)
    {
        var actionPDF = new ViewAsPdf("NIR", modelloNIR) //some route values)
        {
            FileName = "NotaIscrizioneRuolo.pdf"
            //CustomSwitches = custom,
            //PageSize = 4
        };

        byte[] applicationPDFData = null;
        try
        {
            applicationPDFData = actionPDF.BuildPdf(ControllerContext);
        }
        catch (Exception ex)
        {
            throw;
        }
        //Memory
        PdfUtilityCommon utility = new PdfUtilityCommon();
        List<byte[]> listaPDF = new List<byte[]>();
        listaPDF.Add(applicationPDFData);
        MemoryStream ms = utility.MergePdfForms(listaPDF);
        return ms;
    }

但是我有一个运行时错误,因为 controllercontext 是 null 谁能帮帮我?

如果您查看 ControllerContext class documentation,它应该具有 HTTP 请求信息。因为你实例化了这个controller,没有相关的HTTP请求,所以context没有数据。

或许您可以尝试在此 ControllerContext class 上构建您自己的 HTTP 数据。请尝试使用此代码:

NotificheMezzoPecsController not = new NotificheMezzoPecsController();

RouteData route = new RouteData();
route.Values.Add("action", "createPDFNIR");
route.Values.Add("controller", "NotificheMezzoPecsController");

ControllerContext newContext = new ControllerContext(new HttpContextWrapper(System.Web.HttpContext.Current), route, not);
not.ControllerContext = newContext;

// call controller action
MemoryStream nir = not.createPDFNIR(modelloNIR);

让我知道它是否适合你。