C# asp.net ActionResult无法在控制器中查看静态数据
我有一个像这样的简单静态类C# asp.net ActionResult无法在控制器中查看静态数据,c#,asp.net,asp.net-mvc,pdf,C#,Asp.net,Asp.net Mvc,Pdf,我有一个像这样的简单静态类 public static class pdfDataSingle { public static PdfData pdf { get; private set; } public static void SetData(PdfData data) { pdf = data; } } 我首先在MVC控制器中这样设置类 pdfDataSingle.SetData(pdfData); 我已经确认数据都在那里 然后我需要
public static class pdfDataSingle
{
public static PdfData pdf { get; private set; }
public static void SetData(PdfData data)
{
pdf = data;
}
}
我首先在MVC控制器中这样设置类
pdfDataSingle.SetData(pdfData);
我已经确认数据都在那里
然后我需要从操作结果中获取字节,所以首先我调用
pdf.Add(CreateCertificatePart(CertificatePart.NewStatementOfFact));
所以这看起来像这样
private byte[] CreateCertificatePart(CertificatePart part)
{
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 pdfResult = new ActionAsPdf(part.ToString()) { CustomSwitches = customSwitches };
var pdfBytes = pdfResult.BuildFile(ControllerContext);
return pdfBytes;
}
被调用的操作方法如下。。但是静态数据pdfDataSingle为空
public ActionResult NewStatementOfFact()
{
try
{
AppInsightLog.LogInfo(pdfDataSingle.pdf.Schedule.PolicyNumber, "NewStatementOfFact");
return View("StatementOfFact", pdfDataSingle.pdf.Schedule);
}
catch (Exception ex)
{
//AppInsightLog.LogError(ex, quoteReference);
return new HttpStatusCodeResult(400, "NewStatementOfFact");
}
}
当我在本地运行它时,它可以正常工作。。操作结果在静态类(在我的控制器外部声明)中看到数据,但在发布到azure时不会看到。。有人知道为什么会这样吗
谢谢将数据(PdfData)序列化为json字符串并保存到数据库中。然后,您可以在action方法中读回它并将其反序列化。所以我还应该说,我正在尝试从razor视图中获取pdf字节。。如果没有rotaviva还有更好的方法,我洗耳恭听:)我有很多类似NewStatementOffact的ActionResult方法,我不想每次都再次调用数据库。。获取模型的所有数据需要大量的数据库工作,我宁愿只调用一次。。把它储存起来。。然后将其重新用于各种操作方法,否则速度会非常慢。您将此行放置在何处
pdfDataSingle.SetData(pdfData)代码>我在一个post方法GenerateNewCertificate(另一个actionResult)中调用了它,这是我获取静态类的所有数据,然后我调用CreateCertificatePart获取所有部分的数据。我不是pdf爱好者,但如果静态字段为null,则有两个原因:1。你在设置前就得到了这个字段,2。在某个时刻,您将该字段设置为null。建议:如果您的pdf数据从未更改,请在应用程序启动时设置它,如果每个用户的u'r数据更改,请不要使用静态的东西。如果您根据请求更改它,则使用实例类;如果有多个步骤,使用应该考虑<代码> Cache < /C> >按实例类用键(如session),你是指单体吗?但这是一个带有静态成员的类。我尝试了类似Session[“pdfData”]=pdfData的方法;并试图读取该值,但该值也是空的:/a会话最好能正常工作。