【问题标题】:Why is the ViewBag data empty?为什么 ViewBag 数据为空?
【发布时间】:2015-01-31 09:37:18
【问题描述】:

我正在尝试使用 MVC 和 iText 从我的网页创建一个 pdf,但是当我到达视图时,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(string, params object[])' 和 'System.IO.TextWriter.Write(char[])'

我也尝试过:Html.Raw 和 ToString => Html.Raw(ViewBag.Week.ToString()),但这也不起作用。我该怎么做才能确保 View 中的 ViewBag 不为空?

【问题讨论】:

  • 这与 iText 有什么关系?我在任何地方都看不到任何 iText 代码!
  • 我已经添加了与iText相关的代码。
  • 呃! HtmlWorker?该类已被遗弃很长时间,因为 (1.) 它只是一组有限 HTML 标记的临时实现,并且 (2.) 代码无法修复。您应该改用 iTextSharp 的 XML Worker
  • 但是 ViewBag 还是空的。
  • 好吧,我是 iText 的原始开发者,我从未听说过称为 ViewBag 的东西,因此我重复我最初的问题:这与 iText 有什么关系? i> 你到底为什么要添加那个标签?

标签: c# asp.net-mvc html itext


【解决方案1】:

这是答案:http://weblog.west-wind.com/posts/2012/May/30/Rendering-ASPNET-MVC-Views-to-String。我用这个源替换了 ControllerExtensions。它有效。如果有人可以告诉我,为什么通过 ControllerExtensions 类的 ViewBag 消失了。高兴听到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    相关资源
    最近更新 更多