Я пытаюсь создать 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 - nummer <%: ViewBag.Week %> - <%: ViewBag.Datum %></th>
Вы получите следующее сообщение:
вызов является неоднозначным между следующими методами или свойствами: 'System.IO.TextWriter.Write (строка, PARAMS объект [])' и «System.IO .TextWriter.Write (символ [])»
Я пробовал: Html.Raw и ToString =>Html.Raw (ViewBag.Week. ToString()) тоже, но это тоже не работает. Что мне нужно сделать, чтобы ViewBag не был пустым в представлении?
Как это связано с iText? Я не вижу ни одного iText-кода! –
Я добавил код, связанный с iText. – user1531040
Duh! 'HtmlWorker'? Этот класс был оставлен долгое время, потому что (1.) это была специальная реализация только ограниченного набора тегов HTML, и (2) код не был исправлен. Вы должны использовать iTextSharp [XML Worker] (http://stackoverflow.com/questions/tagged/xmlworker). –