2015-03-31 61 views
0

不保留值我有以下代码:的TempData在FileContentResult

[Authorize] 
    [HttpGet] 
    public FileContentResult DownloadMsgAsPdf(string FileId, string outer = "") 
    { 
     var Results = (SearchResult)TempData["Results"]; 
     var msg = Results.emails[FileId]; 
... 
     return File(pdfBytes, System.Net.Mime.MediaTypeNames.Application.Octet, msg.Id + ".pdf"); 
    } 

现在在运行它一次(点击链接),但这一切完全没问题。然而,一旦第二次点击它(没有其他改变或调用),它就会出错,结果为空。我认为这意味着TempData正在清除,但这怎么可能?

以下是完整的代码,如果需要这种耐心:

[Authorize] 
    [HttpGet] 
    public FileContentResult DownloadMsgAsPdf(string FileId, string outer = "") 
    { 
     var Results = (SearchResult)TempData["Results"]; 
     var msg = Results.emails[FileId]; 

     TempData.Keep(); 

     msg.BodyHTML = System.Web.HttpUtility.HtmlDecode(msg.BodyHTML); 

     var htmlContent = String.Format("<center><p><b>Case ID</b>: " + msg.Id 
     + " <b>User ID</b>: " + Session["userid"] 
     + " <b>Privileged</b>: "); 
     if (msg.Tags != null) 
     { 
      htmlContent += msg.Tags.ContainsKey("privileged"); 
     } 
     else 
     { 
      htmlContent += "False"; 
     } 
     htmlContent += " <b>Downloaded</b>: " + DateTime.Now.ToString("g") + "</center>" 
     + " <p> -- Forwarded message -- </p> " 
     + " <p><b> From :</b> <a href='#'>" + msg.From + "</a> </p> " 
     + " <p><b> Date:</b> Mon, oct 25 2010 at 4:42 PM </p> " 
     + " <p> <b>Subject:</b> " + msg.Subject + " </p> " 
     + " <p><b> To:</b> " + msg.To + " </p> " 
     + " <p><b> Cc: </b> </p> " 
     + " <div> " 
     + " <ul> "; 
     if(msg.attachementList != null){ 
      if (!msg.attachementList.Any()) 
      { 
       htmlContent += "<text> " 
       + "<li><label style='color:gray'>No attachment</label></li></text>"; 
      } 
      else 
      { 
       foreach (var attachment in msg.attachementList) 
       { 
        var filename = System.IO.Path.GetFileName(attachment); 
        htmlContent += "<text> " 
        + "<li><a href='#'>" + filename + "</a></li></text>"; 
       } 
      } 
     } 
     htmlContent += "</ul>" 
     + "</div>" 
     + "<div padding: 5px;'>" 
     + msg.BodyText 
     + "</div>" 
     + "</div>"; 

     var pdfBytes = (new NReco.PdfGenerator.HtmlToPdfConverter()).GeneratePdf(htmlContent); 

     if (outer != "") 
     { 
      return File(pdfBytes, System.Net.Mime.MediaTypeNames.Application.Octet, msg.Id + ".pdf"); 
     } 

     return new FileContentResult(pdfBytes, "application/pdf"); 
    } 

回答

0

TempData意味着你只能获得一次。我看到你使用TempData.Keep(),但这种方法只影响相同的http上下文。我想你可以使用SessionCache而不是TempData

+0

感谢您的回复,有什么方法可以多次使用吗? 我试过Session并得到了同样的错误。 – user2463732 2015-03-31 03:58:53