RenderBody中的ViewBag是否传递下来?

时间:2013-05-17 20:46:49

标签: asp.net-mvc razor

非常简单的问题。

我的布局页面看起来像

@RenderBody()
@{
  if (ViewBag.IsInternal)
  {
    //do something here
  }
}

部分看起来像

@{
  ViewBag.IsInternal = false;
}

它正在做我认为它应该做的事情吗?基本上,如果在局部设置了ViewBag.IsInternal,我可以在布局中读取该设置值。

2 个答案:

答案 0 :(得分:1)

您的部分视图不会获得自己的ViewBag,因此修改它不会影响布局类中的ViewBag。

但是,您可以将其作为参考传递到部分视图中,并从部分视图中修改ViewBag布局。

<强>布局

@{Html.RenderPartial("PartialView", Model, new ViewDataDictionary { {"LayoutViewBag", ViewBag}});

<强>部分

@{
   var layoutViewBag = ((dynamic)ViewData["LayoutViewBag"]);
   layoutViewBag.IsInternal = true;
 }

答案 1 :(得分:0)

您可以使用Html.ViewContext.Controller.ViewBag来访问“共享&#39; ViewBag。这是一个我只想包含Pinterest&#39; Javascript(在页面底部),如果我使用了Pinterest按钮。

 if (Html.ViewContext.Controller.ViewBag.Pinterest == true)
 {
      <text>
         <script type="text/javascript" async defer src="//assets.pinterest.com/js/pinit.js"></script>
      </text>
 }

然后你当然用

设置它
    Html.ViewContext.Controller.ViewBag.Pinterest = true;