【发布时间】:2013-04-05 09:34:27
【问题描述】:
我有一个菜单,我使用了一个 cookie 来将菜单设置为通过刷新选择。菜单对所有类都是通用的,所以我把它放在 _layout.cshtml 中,但同时我想要这个布局的控制器,因为有一些功能可以将菜单设置为突出显示。我可以为此创建一个控制器吗?
【问题讨论】:
标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-2 asp.net-mvc-4
我有一个菜单,我使用了一个 cookie 来将菜单设置为通过刷新选择。菜单对所有类都是通用的,所以我把它放在 _layout.cshtml 中,但同时我想要这个布局的控制器,因为有一些功能可以将菜单设置为突出显示。我可以为此创建一个控制器吗?
【问题讨论】:
标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-2 asp.net-mvc-4
是的,您可以调用@Html.Action 或@Hmtl.RenderAction 从视图中调用控制器。但这接近于混合关注点,因为现在您的视图正在主动调用您的控制器。
更好的方法通常是将适当的数据作为视图模型的一部分传递给视图。
但同时我想要这个布局的控制器,因为那里 一些将菜单设置为突出显示的功能。
如果您正在做一些基本的事情,比如突出显示当前页面,可能会有一个更简单的解决方案。您可以将当前页面 ID 放入 ViewBag 并在主 _Layout 文件中检索该值并使用它来选择适当的项目。
【讨论】:
RenderAction 方法,它使用控制器来呈现视图,并在其中包含您需要的任何与 cookie 相关的逻辑。
部分操作可能是您在此处寻找的 - this article may be some help。它与 MVC2 相关,但原理保持不变。
【讨论】:
为menu创建一个action,将menu ui放到view中,然后在布局页面调用Html.Action("menu action name","controllern name")。
【讨论】: