【问题标题】:Should view render menus or master pages应该查看渲染菜单或母版页
【发布时间】:2010-06-11 23:17:05
【问题描述】:

我使用 ActiveRecord 开发了我自己的自定义用户和角色对象,它们不扩展默认的 Asp.Net 提供程序,因此我无法从 HttpContext 获取用户。我可以创建一个自定义 htmlhelper 来呈现菜单,但我的视图应该呈现菜单还是母版页?

如果它是母版页,我如何将当前用户等内容传递给自定义 htmlhelper,因为某些菜单项取决于用户角色。

另外,我如何检测在我的母版页中查看的控制器是什么?

【问题讨论】:

    标签: c# .net asp.net-mvc master-pages


    【解决方案1】:

    1) 如果您的菜单功能应该存在于多个页面上,那么将其放在母版页中是有意义的。如果没有,则正常查看。

    2) 一个流行的选择是让您的所有 ViewModel 都从一个基视图类继承,然后您的母版页使用它。示例:

    System.Web.Mvc.ViewMasterPage<ViewBase>
    System.Web.Mvc.ViewPage<MyViewModel>
    
    public class MyViewModel : ViewBase { }
    

    3) 你可以从路由数据中拉出特定的控制器。但是,如果您需要某些控制器的特定功能,我只建议为这些视图使用不同的母版页,而不是尝试让所有视图都使用相同的母版页。

    【讨论】:

    • 你的建议很有效,因为它迫使我为我的所有视图使用完全强类型的视图模型。
    【解决方案2】:

    一般来说,所有 ASP.NET 控件(无论是 WebForms 还是 MVC)都应该控制自己的状态。

    在处理导航的情况下,我会说创建一个 .ASCX(部分视图)并将其放置在您的母版页上。让分部视图根据 HttpContext 控制它的显示方式。

    【讨论】:

    • 谢谢。我最终创建了一个局部视图,它将负责渲染我的菜单。它非常甜。
    猜你喜欢
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多