Asp.net mvc MVC 4:为共享视图创建控制器\u Layout.cshtml

Asp.net mvc MVC 4:为共享视图创建控制器\u Layout.cshtml,asp.net-mvc,asp.net-mvc-4,razor,Asp.net Mvc,Asp.net Mvc 4,Razor,你是如何做到这一点的? 此视图是自动生成的。 当我手动添加视图时,例如:包含Index.cshtml文件的Contact视图 我可以通过编写控制器联系人来修改此视图 public class ContactController : Controller { public ActionResult Index() { @ViewBag.Test = "this text will be used in my Contact View"; r

你是如何做到这一点的? 此视图是自动生成的。 当我手动添加视图时,例如:包含Index.cshtml文件的Contact视图

我可以通过编写控制器联系人来修改此视图

    public class ContactController : Controller
{
    public ActionResult Index()
    {
        @ViewBag.Test = "this text will be used in my Contact View";

        return View();
    }
}
所以在我的联系人视图中,我可以这样做

<p> @Viewbag.Test </p>
@Viewbag.Test

并显示文本。 但是如何在我的共享视图中为我的_Layout.cshtml文件实现这一点呢?
我也尝试过添加一个SharedController,但没有这样做

你不能为_Layout.cshtml拥有一个控制器。此文件用于任何视图的布局。例如,查看视图文件夹中的_ViewStart.cshtml文件:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}
这基本上告诉所有控制器使用该布局作为围绕控制器操作返回的视图的包装

您的_Layout.cshtml文件已经有一个关于用值填充它的方法的提示:

<head>
    ...
    <title>@ViewBag.Title</title>
    ...
</head>

布局不需要控制器。您的联系人视图将添加到_布局以创建一个完整视图。因此,您也可以在_布局内的联系人控制器中使用任何ViewBag属性_布局可以访问与联系人视图相同的变量

具体来说,在您的示例中:

public class ContactController : Controller
{
    public ActionResult Index()
    {
        @ViewBag.Test = "this text will be used in my Contact View";

        return View();
    }
}

ViewBag.Test在布局中的访问方式与在联系人视图中的访问方式相同。

我想您还没有阅读该问题。OP想知道如何从
\u Layout.cshtml
文件访问
ViewBag
public class ContactController : Controller
{
    public ActionResult Index()
    {
        @ViewBag.Test = "this text will be used in my Contact View";

        return View();
    }
}