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);
让我知道它是否适合你。
我使用 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);
让我知道它是否适合你。