代码之家  ›  专栏  ›  技术社区  ›  LiamB

ASP.NET MVC动态菜单系统

  •  5
  • LiamB  · 技术社区  · 15 年前

    在当前的ASP.NET MVC应用程序中,我们有两个菜单系统,一个位于顶部,另一个位于左侧。现在我们有了一个呈现菜单的局部视图,但是这也是唯一一种将菜单项与每个单独的视图模型一起返回的方法吗?我们试图不使用viewdata字典。

    我认为答案是肯定的,但是我想看看别人怎么想

    7 回复  |  直到 11 年前
        1
  •  3
  •   mxmissile    15 年前

    3种选择:

    1. RenderAction 一路走来。

    2. Ryan回答时呈现的部分。

    3. 例如,一个抽象的MasterViewModel。你所有的模型都会从中继承。由操作筛选器填充。

        2
  •  3
  •   Josh Pearce    15 年前

    您使用的是基本控制器吗?我发现使用ONActionExecuting方法和重写ONActionExecuting方法可以帮助我有一个中心位置来保留所有公共页面逻辑。

        3
  •  3
  •   Ryan Lanciaux    15 年前

    您可以使用 MVC Future's 如果除了使用主视图模型外,还想为菜单使用自己的控制器等,请使用库。

        4
  •  1
  •   user151323    15 年前

    你基本上有两个选择:

    1. 使用ViewModel设置要显示的菜单项,可以从任何视图(全部或部分)访问它们。

    2. 创建强类型模型的层次结构,将菜单项放在basemodel中的某个位置,然后将出现在每个派生模型中。

    您可能感兴趣的是异步控制器或部分请求。它没有在ASP.NET MVC中实现,但是您可以检查 MVC Contrib 社区项目,它有一些支持。

        5
  •  0
  •   Tony Heupel    15 年前

    有很多方法可以处理这个问题,但是有一种非常简单的方法可以处理这个问题,不需要重新构建整个应用程序。

    我们有类似的问题,其中我们的页面/部分有一个定义良好的viewdata.model类型,但视图包含一个在多个页面上重复使用的部分。我们也试图避免使用viewdatadictionary。

    但是,我们发现您所描述的情况正是我们喜欢使用ViewDataDictionary条目的具体场景。我们在应用程序模型中保留了一个静态常量类,该类包含每种类型常量的内部类,包括viewdata键,这样我们就不会在任何地方为这些常量设置字符串。

    然后,我们的控制器操作将填充viewdata键和另一个页面/部分中的部分,以检查该键是否存在,并使用该键而不是viewdata.model。它使部分工作在它需要的任何地方,并保持你的视图模型干净。通过使用常量,我们可以避免在任何地方使用原始字符串。

        6
  •  0
  •   PatrickSteele    15 年前

    使用ActionFilter用所需的菜单信息填充ViewData。仅将其应用于类和/或方法(如果在任何地方都需要的话,可能在基控制器类上)。在控制器上创建一些扩展方法,使从VIEWDATA访问数据成为强类型(并且在以后更改其存储位置时是透明的)。

    我最近做了 a blog post 使用类似的方法(我需要在每页上显示赞助商列表)。它可以帮助你找到正确的方向。

        7
  •  0
  •   LiamB    15 年前

    为了增加这个,渲染被添加到MVC2测试版。