2017-04-11 57 views
0

我有共享_Layout具有部分菜单和正文(RenderBody)。我想在控制器或视图级别上控制_Layout的渲染方式。对于一个控制器动作或视图,我想隐藏菜单(_Layout的一部分),对于其他我想显示它。ASP.MVC从控制器或视图级别更改_Layout元素

有没有明确的解决方案来做到这一点?喜欢的东西:

thisView.Layout.HideMenu =真

+1

创建一个没有菜单的布局并使用它 –

+0

这2个布局将共享相同的逻辑,当涉及到更新此逻辑时,它的额外维护。在解决方案中,我正在使用布局是相当复杂的。 –

+1

2布局将是最好的,但你总是可以在基本视图模型或'ViewBag'中传递一个值来指示是否显示这些元素 - '@if(ViewBag.IncludeMenu){//渲染菜单}' –

回答

1

您可以创建一个基地视图模型与布尔属性bool showMenu {get; set;}然后进行其他的ViewModels从基本视图模型继承。

最后,在您的_Layout.cshtml(将基础ViewModel作为其@model)中,您可以使用剃刀if(Model.showMenu)。如果为true,则菜单将呈现,如果为false,则会隐藏。

+0

听起来有趣但我应该关心通过表单传递这个属性吗?我的意思是发布数据模型时会绑定到表单 - 不是吗? –

+0

这取决于你,如果你想要表单内容来确定如何设置标志,那么你可以控制标志,但是你想要的。如果表单不相关,则不需要将表单传递给 – Ciwan

+1

您也可以将此值存储在[ViewBag](http://stackoverflow.com/documentation/asp.net-mvc/1286/viewdata -viewbag-tempdata/4231/what-are-viewdata-viewbag-and-tempdata)属性,而不是将其添加到ViewModel。 –

相关问题