ASP.NET MVC5从布局访问ViewBag?

时间:2013-11-25 22:10:27

标签: c# asp.net-mvc

我正在尝试将动态数据从我的控制器传递到我的视图和布局。我目前正在使用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

4 个答案:

答案 0 :(得分:7)

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

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

然后在布局和视图中调用

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

答案 1 :(得分:1)

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

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

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

<head>
    <meta charset="UTF-8" />
    <title>@ViewBag.Title | Example.com</title>
    <link href="css/site.css" rel="stylesheet" type="text/css" />
</head>

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

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

答案 2 :(得分:0)

一种简单的方法是从您的视图中设置一个ViewBag属性,该属性随后将在您的布局文件中提供

Index.cshtml

@{
   ViewBag.Container = false;
}

_Layout.cshtml

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

<div class="@container">
   ...
</div>

答案 3 :(得分:0)

只需在家庭控制器中使用视图包,您也可以在“布局”页面上访问它。