【问题标题】:asp.net mvc3 and multi-level navigationasp.net mvc3 和多级导航
【发布时间】:2011-03-31 16:19:19
【问题描述】:

我正在编写新的 asp.net mvc 应用程序,我对创建多级导航系统有疑问。

例如,我有一个带有主导航的网络(Cpu --- Gpu ---- Ram)

和子导航 (intel,amd --- ati,nvidia --- DDR2,DD3)

好吧,我的第一个实现就在这里:

public class NavigationItem
{
    public virtual int Id { get; set; }
    public virtual string Title { get; set; }
    public virtual string Controller { get; set; }
    public virtual string Action { get; set; }
    public virtual string Url { get; set; }
    public virtual string Section { get; set; }
}


public class NavigationController : Controller
{
    private readonly IUnitOfWork _unitOfWork;

    public NavigationController(IUnitOfWork unitOfWork)
    {
        _unitOfWork = unitOfWork;
    }

    public ActionResult MainMenu()
    {
        return View(_unitOfWork.NavigationItems.Where(x => x.Section == null).ToList());
    }

    public ActionResult SectionMenu()
    {


        return View(_unitOfWork.NavigationItems.Where(x => x.Section == "// name of section").ToLis());
    }
}

最后我的布局页面是:

<!DOCTYPE html>
<html>
<head>
    <title>@ViewBag.Title</title>
</head>
<body>
 <div class="main-menu">
  @{Html.RenderAction("MainMenu", "Navigation");}
 </div>

 <div class="section-menu">
  @{Html.RenderAction("SectionMenu", "Navigation");}
 </div>

    @RenderBody()
</body>
</html>

有了这个实现,我遇到了如何在 MainMenu 处于活动状态的情况下处理 SectionMenu 的问题,因为我想生成 SectionMenu 取决于 MainMenu 并突出显示它们。

我认为女巫的一个解决方法是在 SectionMenu 中处理 url(控制器)。 例如:

    if (RouteData.Values["controller"].ToString() == "Administration")
    {
        // Generate section menu for Administration main menu
    }

我不喜欢这个解决方案,因为我使用“魔术字符串”值,而且我没有每个 MainMenu 只有一个控制器。

如何实施这个解决方案?

谢谢你的建议

【问题讨论】:

  • 关于您如何完成此任务的任何更新?我只是写了几乎完全相同的代码来尝试做同样的事情......

标签: asp.net-mvc-3 routing navigation url-routing


【解决方案1】:

我想你必须更深入地了解 MVC 的路由系统。一开始它看起来不是很简单,但这可能是整个 MVC 中最重要的领域。有时您很容易感到困惑,特别是如果您在 Global.asax 中定义了许多路由。有一个名为 Route 调试器的项目,它有帮助。我不记得链接了。尝试谷歌它...如果你找不到它我会稍后发送链接...

【讨论】:

【解决方案2】:

好的,我使用 ViewBag 功能。不干净,但有效

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 2016-05-03
    相关资源
    最近更新 更多