MVC 4:为共享视图_Layout.cshtml创建控制器

时间:2013-01-04 16:30:46

标签: asp.net-mvc asp.net-mvc-4 razor

你是如何实现这一目标的? 此视图自动生成。 当我手动添加View时,例如:在其中包含Index.cshtml文件的联系人视图。

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

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

        return View();
    }
}

所以在我的联系人视图中,我可以这样做

<p> @Viewbag.Test </p>

将显示文本。 但是,如何在我的共享视图中为我的_Layout.cshtml文件实现此目的? 我尝试添加一个SharedController,但没有这样工作

2 个答案:

答案 0 :(得分:2)

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

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

这基本上告诉所有控制器使用该布局作为控制器操作返回的视图的包装。

你的_Layout.cshtml文件已经提示了一种用值填充它的方法:

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

如果您在视图中执行以下操作,它将在_Layout.cshtml文件的head / title部分中呈现:

@{
    @ViewBag.Title = "Home";
}

答案 1 :(得分:1)

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

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

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

        return View();
    }
}

ViewBag.Test也可以在_Layout中访问,就像在联系人视图中一样。