Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.MVC从控制器或视图级别更改布局元素_C#_Asp.net Mvc - Fatal编程技术网

C# ASP.MVC从控制器或视图级别更改布局元素

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

我共享了带有部分菜单和主体(RenderBody)的_布局。我想在控制器或视图级别控制_布局的渲染方式。对于一个控制器操作或视图,我想隐藏菜单(_布局的一部分),对于另一个,我想显示它

有没有明确的解决办法?比如:


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中,并随请求一起存在。它可用于项目的每个级别:布局、控制器操作和视图。谢谢你的帮助。