2012-04-16 89 views
2

看起来像一个简单的问题,但我显然缺少一些东西。当使用Html.Action时,父视图中的部分视图ViewBag数据不可用()

我有一个ViewBag,我在partialView中创建。 的PartialView正在经历

@Html.Action() 

渲染其实这就是ActionMethod其内部正在建立ViewBag变量。 一旦设置它们在部分视图内部可用,然而当我们回到父视图变量中调用Html.Action()的变量不再可用时。

任何想法怎么来的?我如何访问在Html.Action()动作方法中分配的ViewBag变量?

P.S. 我看到以下问题: Can't access ViewBag in a partial view in ASP.NET MVC3

...从我收集的是ViewBag变量传递时,你只需渲染的局部视图(@ Html.Partial()),但是当你渲染的部分他们不是查看另一个操作方法。

请帮忙吗?

回答

3

根据此SO帖子Does a child action share the same ViewBag with its "parents" action?,子动作的ViewData/ViewBag无法从其父动作访问。这种做法很有意义,因为ViewData/ViewBag中存储的信息不会在重定向中生存,并且在内部,子操作可能在完成执行后重定向回父操作。您希望将数据存储在可以存活一次重定向的位置,因此请尝试使用TempData,然后查看它是否有效。

+0

从来没有使用过它,但只是读了它,我认为它可能工作。谢谢。 – Shenaniganz 2012-04-17 00:11:18

+0

+1完美适合我的需求,为了从'HTMlHelper'类中获得此类,您可以使用'helper.ViewContext.Controller.TempData',其中帮助器是'this HtmlHelper helper' – Rippo 2013-10-11 13:18:29

+0

使用TempData是实际的解决方案。 – 2015-12-02 10:26:20