ASP.NET MVC5从布局访问ViewBag?

我正在尝试将动态数据从我的控制器传递到我的视图和布局。 我目前正在使用ViewBag将数据从Controller传递到视图,该视图工作正常。 我无法从布局中访问ViewBag。 有没有办法做到这一点?

我正在使用ASP.NET W / MVC5(C#)。

编辑:更新了W /代码:

//layout.cshtml @ViewBag.username 

产生此错误:

 Compilation Error Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately. Compiler Error Message: CS0103: The name 'ViewBag' does not exist in the current context 

我建议你有一个布局使用的动作方法,它传递你需要的数据。 例如

 public class ControllerName : Controller { public ActionMethod GetData() { return Content("Some data"); // Of whatever you need to return. } } 

然后在布局和视图中,您可以调用

 @Html.Action("GetData", "ControllerName") 

考虑AppController控制器中的一个Action,它返回Index.cshtml视图:

 public class AppController: Controller { public IActionResult Index() { ViewBag.Title = "Home Page"; return View(); } } 

在我的Index.cshtml视图中,我可以直接调用@ ViewBag.Title来获取我之前在操作中设置的内容。

   @ViewBag.Title | Example.com   

您甚至可以传递列表等复杂数据,并使用Razor的模型/模型访问视图中的数据。

我希望我能帮助你解决这个问题。

一种简单的方法是从视图中设置ViewBag属性,然后可以在Layout文件中使用该属性

Index.cshtml

 @{ ViewBag.Container = false; } 

_Layout.cshtml

 @{ var container = ViewBag.Container != null && !ViewBag.Container ? "" : "container"; } 
...