C#在MVC中处理GUI

C#在MVC中处理GUI,c#,asp.net-mvc,panel,C#,Asp.net Mvc,Panel,我正在使用asp.NETMVC框架。在我的应用程序中,用户必须登录。当用户名和密码组合正确时,包含菜单的div(或panel?)必须可见。但是我该怎么做呢?当在我的面板pnlMenu中输入名称时,在我的控制器中,我无法执行以下操作: pnlMenu.visible = true; 那么,我必须如何做到这一点呢?在视图上创建一个方法或属性,使您能够隐藏或显示相应的控件 然后,在控制器中,您可以访问视图的属性或方法,不是吗 您不希望在控制器中引用视图上的特定“控件”,因为MVC的一个思想是您可以用

我正在使用asp.NETMVC框架。在我的应用程序中,用户必须登录。当用户名和密码组合正确时,包含菜单的div(或panel?)必须可见。但是我该怎么做呢?当在我的面板pnlMenu中输入名称时,在我的控制器中,我无法执行以下操作:

pnlMenu.visible = true;

那么,我必须如何做到这一点呢?

在视图上创建一个方法或属性,使您能够隐藏或显示相应的控件

然后,在控制器中,您可以访问视图的属性或方法,不是吗

您不希望在控制器中引用视图上的特定“控件”,因为MVC的一个思想是您可以用另一个实现(web/win/…)替换UI,并使用相同的控制器和应用程序逻辑。 然后,您只需要描述视图应该支持的操作,因此,在描述视图必须支持的“契约”的接口中,您应该创建一个名为“ChangeState(bool loggedIn)”的方法


在控制器中,用户登录后可以调用此方法。

在视图中创建一个方法或属性,使您能够隐藏或显示相应的控件

然后,在控制器中,您可以访问视图的属性或方法,不是吗

您不希望在控制器中引用视图上的特定“控件”,因为MVC的一个思想是您可以用另一个实现(web/win/…)替换UI,并使用相同的控制器和应用程序逻辑。 然后,您只需要描述视图应该支持的操作,因此,在描述视图必须支持的“契约”的接口中,您应该创建一个名为“ChangeState(bool loggedIn)”的方法


在控制器中,用户登录后可以调用此方法。

您应该在控制器中检查用户是否登录,并在ViewData中设置如下值:

ViewData["IsLoggedIn"] = true;

然后在视图中,可以基于此值设置方法的可见性。这样,如果您以后更改视图,或决定拥有多个视图,则每个视图都可以使用此值,并且视图和控制器之间没有任何耦合。

您应该在控制器中检查用户是否已登录,并在ViewData中设置如下值:

ViewData["IsLoggedIn"] = true;

然后在视图中,可以基于此值设置方法的可见性。这样,如果您以后更改视图,或决定拥有多个视图,它们都可以使用此值,并且视图和控制器之间没有任何耦合。

如何在视图上创建属性?该视图是一个没有代码隐藏文件的aspx,对吗?…因此,在描述视图必须支持的“契约”的界面中,您应该创建一个名为…的方法。这部分我不理解。我需要在哪里执行此操作?您不想从控制器直接访问视图中的方法或属性。为什么不?设置“ViewData”时,这是视图和控制器之间的一些公共/共享数据;为什么会有这种额外的间接性?您不想在视图上调用方法,因为这样会将控制器与它所显示的视图紧密耦合。如果以后要更改视图,则需要确保视图具有此方法,否则代码甚至无法编译。使用ViewData,视图可以简单地忽略不需要的数据。如何在视图上创建属性?该视图是一个没有代码隐藏文件的aspx,对吗?…因此,在描述视图必须支持的“契约”的界面中,您应该创建一个名为…的方法。这部分我不理解。我需要在哪里执行此操作?您不想从控制器直接访问视图中的方法或属性。为什么不?设置“ViewData”时,这是视图和控制器之间的一些公共/共享数据;为什么会有这种额外的间接性?您不想在视图上调用方法,因为这样会将控制器与它所显示的视图紧密耦合。如果以后要更改视图,则需要确保视图具有此方法,否则代码甚至无法编译。使用ViewData,如果不需要,视图可以简单地忽略该数据。