2015-01-31 3 views
1

Я пытаюсь создать pdf-файл с моей веб-страницы с помощью MVC и iText, но когда я доберусь до ViewBag, данные пустые.Почему данные ViewBag пусты?

В контроллере ViewBag все еще имел значения.

Почему данные ViewBag пусты?

Запускает в Вид:

<td><span> 
    <a href='<%: Url.Action("HitlijstNaarPdf", new { AID_Hitlijst = ViewBag.Huidig })%>' target="_blank"> 
     Download lijst 
    </a></span> 
</td> 

Вызов результата в контроллере

public FileStreamResult HitlijstNaarPdf(int? AID_Hitlijst = 0) 
{ 
    SelectPeriode(AID_Hitlijst); 
    GetHitlijstSettings(); 
    var model = new HitlijstModel(); 
    string sHtmlInhoud= this.RenderView("Index", model); 

    FileStreamResult result = PDFGenerator(sHtmlInhoud); 
    return result; 
} 

private void GetHitlijstSettings() 
{ 
    ViewBag.Datum = FHitlijstSettings.Datum; 
    ViewBag.Jaar = FHitlijstSettings.Jaar; 
    ViewBag.Week = FHitlijstSettings.Week; 
} 

В классе ControllerExtensions:

public static class ControllerExtensions 
{ 
    public static string RenderView(this Controller controller, string viewName, object model) 
    { 
     return RenderView(controller, viewName, new ViewDataDictionary(model)); 
    } 

    public static string RenderView(this Controller controller, string viewName, ViewDataDictionary viewData) 
    { 
     var controllerContext = controller.ControllerContext; 

     var viewResult = ViewEngines.Engines.FindView(controllerContext, viewName, null); 

     StringWriter stringWriter; 

     using (stringWriter = new StringWriter()) 
     { 
      var viewContext = new ViewContext(
       controllerContext, 
       viewResult.View, 
       viewData, 
       controllerContext.Controller.TempData, 
       stringWriter); 

      // Here viewResult.ViewBag.Week still has data 
      // by debugging you see: 
      // viewResult.ViewBag.Week = 14; 
      // viewResult.ViewBag.Datum = "maandag 6 april 1987"; 
      viewResult.View.Render(viewContext, stringWriter); 
      viewResult.ViewEngine.ReleaseView(controllerContext, viewResult.View); 
     } 

     return stringWriter.ToString(); 
    } 
} 

и когда система возвращается к View (ViewBag.Week < => null):

<th class="hitlijst_datum">Hitlijst&nbsp;-&nbsp;nummer&nbsp;<%: ViewBag.Week %>&nbsp;-&nbsp;<%: ViewBag.Datum %></th> 

Вы получите следующее сообщение:

вызов является неоднозначным между следующими методами или свойствами: 'System.IO.TextWriter.Write (строка, PARAMS объект [])' и «System.IO .TextWriter.Write (символ [])»

Я пробовал: Html.Raw и ToString =>Html.Raw (ViewBag.Week. ToString()) тоже, но это тоже не работает. Что мне нужно сделать, чтобы ViewBag не был пустым в представлении?

+0

Как это связано с iText? Я не вижу ни одного iText-кода! –

+0

Я добавил код, связанный с iText. – user1531040

+0

Duh! 'HtmlWorker'? Этот класс был оставлен долгое время, потому что (1.) это была специальная реализация только ограниченного набора тегов HTML, и (2) код не был исправлен. Вы должны использовать iTextSharp [XML Worker] (http://stackoverflow.com/questions/tagged/xmlworker). –

ответ

Смежные вопросы