2017-04-11 130 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

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