为_ViewStart.cshtml添加逻辑

时间:2016-11-21 22:42:14

标签: c# asp.net-mvc razor

有没有办法在_ViewStart.cshtml文件中添加逻辑来驱动使用哪个_Layout文件?

从概念上讲,我想要执行下面的代码(在Home控制器中确定ViewBag.Context)。但是我在ViewBag下得到一个红色的波浪形(在当前上下文中不存在)。我想这是一个问题,因为这个视图页面不知道哪个控制器/方法正在调用它。

@{if (ViewBag.Context == "AA")
    {
        Layout = "~/Views/Shared/_Layout_AA.cshtml";
    }
    else
    {
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
}

4 个答案:

答案 0 :(得分:1)

FWIW,您也可以在控制器中执行此操作:

if (someCondition == "AA")
{
    return View("MyView", "~/Views/Shared/_Layout_AA.cshtml");
}
else
{
    return View ("MyView", "~/Views/Shared/_Layout.cshtml");
}

答案 1 :(得分:0)

使用PageData属性(它更适用于ASP.NET WebPages,很少在MVC中使用) 设置:

@{
    PageData["message"] = "Hello";
}

提取

<h2>@PageData["message"]</h2>

来源:How do I set ViewBag properties on _ViewStart.cshtml?

答案 2 :(得分:0)

使用三元运算符:

DataGridView

答案 3 :(得分:0)

你们有些人没有看到“但我在ViewBag下得到了一个红色的波浪形(在当前上下文中不存在)。我想这是一个问题,因为这个视图页面不知道哪个控制器/方法正在调用它。”

我的解决方案是在开始时在控制器中将值嵌入到cookie中。然后在_ViewStart.cshtml文件中,我检索cookie值,现在可以使用它来指示我的布局逻辑。