Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.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
Asp.net mvc Asp.NETMVC动态菜单系统_Asp.net Mvc_Asp.net Mvc 2 - Fatal编程技术网

Asp.net mvc Asp.NETMVC动态菜单系统

Asp.net mvc Asp.NETMVC动态菜单系统,asp.net-mvc,asp.net-mvc-2,Asp.net Mvc,Asp.net Mvc 2,在我们当前的Asp.net MVC应用程序中,我们有两个菜单系统,一个位于顶部,另一个位于左侧。现在我们有了一个部分视图来呈现菜单,但是,这是使用每个ViewModel返回菜单项的唯一方法吗?我们正在尝试不使用ViewData字典 我认为答案是肯定的,但是我想看看其他人怎么想,如果你想拥有自己的控制器等,除了使用主视图模型之外,你还可以使用库中的渲染操作 您基本上有两种选择: 使用ViewModel设置要显示的菜单项,可以从任何视图(完整视图或部分视图)访问这些菜单项 创建一个强类型模型的层次结

在我们当前的Asp.net MVC应用程序中,我们有两个菜单系统,一个位于顶部,另一个位于左侧。现在我们有了一个部分视图来呈现菜单,但是,这是使用每个ViewModel返回菜单项的唯一方法吗?我们正在尝试不使用ViewData字典


我认为答案是肯定的,但是我想看看其他人怎么想,如果你想拥有自己的控制器等,除了使用主视图模型之外,你还可以使用库中的渲染操作

您基本上有两种选择:

  • 使用ViewModel设置要显示的菜单项,可以从任何视图(完整视图或部分视图)访问这些菜单项

  • 创建一个强类型模型的层次结构,将菜单项放在BaseModel的某个位置,然后将在每个派生模型中显示


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

    有很多方法可以处理此问题,但我们发现有一种非常简单的方法可以处理此问题,不需要重新设计整个应用程序

    我们也遇到过类似的问题,我们的页面/分部有一个定义良好的ViewData.Model类型,但视图包含一个分部,可在多个页面上重复使用。我们还试图避免使用ViewDataDictionary

    但是,我们发现您描述的情况正是我们喜欢使用ViewDataDictionary条目的情况。我们在应用程序模型中保留了一个静态常量类,该类包含每种常量类型的内部类,包括ViewData键,这样我们就不会到处都有用于这些常量的字符串

    然后,我们的控制器操作填充ViewData键,并在另一页/部分中检查该键是否存在,并使用该键而不是ViewData.Model。它可以使部分工作在需要的任何位置,并保持ViewModel的干净。通过使用常量,我们可以避免到处都是原始字符串。

    3选项:

  • 一路走来

  • 如Ryan回答的部分渲染

  • 例如,抽象的MasterViewModel。您所有的out模型都将继承自此。由操作筛选器填充


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


    我最近也采用了类似的方法(我需要在每页上显示赞助商名单)。它可能会帮助您找到正确的方向。

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

    为了补充这一点,RenderAction被添加到MVC2 Beta中

    MVC Contrib库很好,但是如果所需的只是渲染部分的功能,那么使用Microsoft提供的MVC Future库可能会更容易。我相信您指的是RenderAction,而不是Futures程序集中的RenderPartial。