RenderPartial and ViewBag

5

我正在尝试修改这段代码:

http://www.codeproject.com/Articles/260470/PDF-reporting-using-ASP-NET-MVC3

以便获取ViewBag数据来呈现PDF中的视图。

基本上,我需要使用新的上下文将我的ViewBag传递给Html.RenderPartial,当前的代码如下:

Html.RenderPartial(viewName, model);

我正在尝试将其更改为类似以下的内容:

Html.RenderPartial(viewName, model, new ViewDataDictionary(ViewBag));

我没有收到任何错误提示,但是字典却一直为空。
敬礼
2个回答

15
尝试使用 ViewData 属性而不是 ViewBag
Html.RenderPartial(viewName, model, new ViewDataDictionary(ViewData));

ViewBag 属性是一个动态对象,所以你调用的 ViewDataDictionary 构造函数是一个接受 object 的构造函数。最好使用一个已经填充了数据的 ViewDataDictionary 构造函数。ViewBag 和 ViewData 中的数据是相同的。


我可以让它工作,但我发现我正在使用一个名为“ViewBag”的变量,我认为这不是一个好主意,所以我将其更改为更好的名称,并进行了更改,现在运行得很好!谢谢! - Santiago
+1.谢谢!太好了。我知道ViewData,但从未使用过。有时会陷入这个问题,大多数时间都会创建一个新的viewModel来解决问题。 - Tchaps

0

您可以使用:

@Html.Partial(viewName)

在主视图中,可以部分访问Partial ViewBag。
好的。如果您需要将Partial View中的HTML呈现为PDF文件,您可以使用以下代码:
@{
    var htmlString = Html.Partial(viewName);    
    var pdfData = PdfComposerClass.CreatePdfStaticMethod(htmlString);   
}

谢谢,但这不是我需要的,这是一个特殊情况,在某些情况下,我需要将视图呈现为PDF,用于执行此操作的API有效,但未获取ViewBag数据,我发现它创建了一个新上下文,问题似乎出在我上面写的那一行。 - Santiago

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接