2017-04-11 129 views
0

我需要生成每个合作伙伴的AR的pdf副本,并且我试图通过TempData将模型传递给另一个视图,但它始终返回null。似乎无法将模型传递给ActionAsPdf

下面是我的代码如下。

public ActionResult GenerateARPDFs(string dateasof) 
{ 
    dateasof = "03-31-17"; 
    var report = new ReportViewModel(); 
    report.AccountsReceivable = _bhelper.GetAccountsReceivable("", "", "", DateTime.Parse(dateasof)). 
           Where(w => !w.SOANum.Any(y => char.IsLetter(y)) || 
           w.SOANum.Contains("SOA")).ToList<AccountsReceivable>(); 

    foreach (var partner in report.AccountsReceivable.Select(m => m.BP).Distinct()) 
    { 
     TempData["MyModel"] = report; 
     var actionResult = new ActionAsPdf("AccountsReceivableReport_PerPartner", new { employeecode = partner }) 
     { 
      PageSize = Rotativa.Options.Size.Letter, 
      PageOrientation = Rotativa.Options.Orientation.Landscape, 
      PageMargins = new Rotativa.Options.Margins(5, 5, 5, 5), 
      MinimumFontSize = 12 
     }; 
     var byteArray = actionResult.BuildPdf(ControllerContext); 
     var fullPath = ConfigurationManager.AppSettings["ArPDF"].ToString() + @"\" + partner + ".pdf"; 
     var fileStream = new FileStream(fullPath, FileMode.CreateNew, FileAccess.ReadWrite); 
     fileStream.Write(byteArray, 0, byteArray.Length); 
     fileStream.Close(); 
    } 
    TempData["SuccessMessage"] = "Generation successful!"; 
    return View(); 
} 



public ActionResult AccountsReceivableReport_PerPartner(string employeecode) 
{ 
    var report = (ReportViewModel)TempData["MyModel"]; 
    report.AccountsReceivable = filter by partner here////....; 
    return View(report); 
} 

但是,当它到达AccountsReceivableReport,到TempData始终为空。 我可以只记得AccountsReceivableReport()上的SP,但这会花费更长的时间。

将tempdata传递给ActionAsPdf有问题吗? 我使用rotativa btw。

当我插入断点时,TempData [“MyModel”]成功地填充了结果,但是当我到达AccountsReceivableReport_PerPartner()的方法时,它现在为空。

如果我尝试从ActionAsPdf改变ViewAsPdf它的buildPdf部分

回答

0

的TempData在ASP.NET MVC返回一个错误基本上是从 TempDataDictionary衍生的字典对象。 TempData停留在随后的HTTP请求中,因为 与其他选项(ViewBag和ViewData)相反,它们只保留当前请求的 。此detail

尝试会话:

public ActionResult AccountsReceivableReport_PerPartner(string employeecode) 
{ 
    var report = Session["MyModel"] as ReportViewModel; 
    return View(report); 
} 
+0

甚至当我切换到一个会话,它仍然是空 –

+0

会议[ “为MyModel”] =报告;设置这个呢? –

+0

是的,我也改变了那部分。 –