我正在尝试将动态数据从我的控制器传递到我的视图和布局。我目前正在使用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
答案 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)
只需在家庭控制器中使用视图包,您也可以在“布局”页面上访问它。