Asp.net mvc Asp.NETMVC动态菜单系统
在我们当前的Asp.net MVC应用程序中,我们有两个菜单系统,一个位于顶部,另一个位于左侧。现在我们有了一个部分视图来呈现菜单,但是,这是使用每个ViewModel返回菜单项的唯一方法吗?我们正在尝试不使用ViewData字典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中实现,但您可以查看社区项目,它提供了一些支持。有很多方法可以处理此问题,但我们发现有一种非常简单的方法可以处理此问题,不需要重新设计整个应用程序 我们也遇到过类似的问题,我们的页面/分部有一个定义良好的ViewData.Model类型,但视图包含一个分部,可在多个页面上重复使用。我们还试图避免使用ViewDataDictionary 但是,我们发现您描述的情况正是我们喜欢使用ViewDataDictionary条目的情况。我们在应用程序模型中保留了一个静态常量类,该类包含每种常量类型的内部类,包括ViewData键,这样我们就不会到处都有用于这些常量的字符串 然后,我们的控制器操作填充ViewData键,并在另一页/部分中检查该键是否存在,并使用该键而不是ViewData.Model。它可以使部分工作在需要的任何位置,并保持ViewModel的干净。通过使用常量,我们可以避免到处都是原始字符串。3选项:
使用ActionFilter用所需的菜单信息填充ViewData。仅将其应用于类和/或方法(如果到处都需要,则可能应用于基本控制器类)。在控制器上创建一些扩展方法,使从ViewData访问数据成为强类型(并且在以后更改其存储位置时是透明的)
我最近也采用了类似的方法(我需要在每页上显示赞助商名单)。它可能会帮助您找到正确的方向。您使用的是基本控制器吗?我发现使用OnActionExecuting方法并重写OnActionExecuting方法有助于我有一个中心位置来保留所有公共页面逻辑。为了补充这一点,RenderAction被添加到MVC2 Beta中 MVC Contrib库很好,但是如果所需的只是渲染部分的功能,那么使用Microsoft提供的MVC Future库可能会更容易。我相信您指的是RenderAction,而不是Futures程序集中的RenderPartial。