C# ASP.MVC从控制器或视图级别更改布局元素
我共享了带有部分菜单和主体(RenderBody)的_布局。我想在控制器或视图级别控制_布局的渲染方式。对于一个控制器操作或视图,我想隐藏菜单(_布局的一部分),对于另一个,我想显示它 有没有明确的解决办法?比如:C# ASP.MVC从控制器或视图级别更改布局元素,c#,asp.net-mvc,C#,Asp.net Mvc,我共享了带有部分菜单和主体(RenderBody)的_布局。我想在控制器或视图级别控制_布局的渲染方式。对于一个控制器操作或视图,我想隐藏菜单(_布局的一部分),对于另一个,我想显示它 有没有明确的解决办法?比如: thisView.Layout.HideMenu=true您可以使用布尔属性bool showMenu{get;set;}创建一个基本视图模型,然后使其他视图模型从基本视图模型继承 最后,在您的\u Layout.cshtml(它将以基本视图模型作为其@model)中,如果(mode
thisView.Layout.HideMenu=true您可以使用布尔属性
bool showMenu{get;set;}
创建一个基本视图模型,然后使其他视图模型从基本视图模型继承
最后,在您的
\u Layout.cshtml
(它将以基本视图模型作为其@model
)中,如果(model.showMenu),您可以执行Razor。如果为true,则菜单将呈现,如果为false,则菜单将隐藏。在不使用菜单的情况下再创建一个布局,并使用它。这两个布局将共享相同的逻辑,在更新此逻辑时需要额外维护。在解决方案中,我使用的布局非常复杂。2个布局最好,但您始终可以在基本视图模型或ViewBag
中传递一个值,以指示是否应显示元素-@if(ViewBag.IncludeMenu){//render menu}
听起来很有趣,但我是否应该关心在表单上传递此属性?我的意思是,当发布数据时,数据模型将绑定到表单-不是吗?这取决于您,如果您希望表单内容确定如何设置标志,那么您可以根据需要控制标志。如果表单是不相关的,那么您不需要在表单中传递它。您也可以将此值存储在属性中,而不是将其添加到ViewModel中。确实可以。我发现ViewModels更易于调试,但是的,您也可以使用ViewBag。好的,这是一种可能的解决方案,我将其标记为可能的答案。我用描述布局属性的类实现了另一个解决方案。此类的实例存储在singleton中,并随请求一起存在。它可用于项目的每个级别:布局、控制器操作和视图。谢谢你的帮助。