2016-11-21 83 views
0

有没有办法在_ViewStart.cshtml文件中添加逻辑来驱动要使用的_Layout文件?将逻辑添加到_ViewStart.cshtml

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

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

回答

0

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

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

1

FWIW,你也可以在控制器中做到这一点:

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

使用三元运算符:

@{ 
    Layout = ViewBag.Context == "AA" ? "~/Views/Shared/_Layout_AA.cshtml" : "~/Views/Shared/_Layout.cshtml" ; 
    }