固定长度菜单

时间:2012-07-19 12:20:20

标签: asp.net-mvc mvcsitemapprovider

我想有两个级别的菜单如下:

Item1 | 第2项 |项目3

Item2.1 |项目2.2 |项目2.3

如何编写站点地图文件和MenuHelperModel以获得上述效果?

编辑:我创建了这样的站点地图文件:

<mvcSiteMapNode title="MyApp" clickable="false">
   <mvcSiteMapNode title="Item1" controller="Item11">
      <mvcSiteMapNode title="Item1.1" controller="Item11" />
      <mvcSiteMapNode title="Item1.2" controller="Item12" />
   </mvcSiteMapNode>
   ...
</mvcSiteMapNode>

不幸的是,IsInCurrentPath仅适用于MyApp节点,因此我无法突出显示正确的项目。

1 个答案:

答案 0 :(得分:0)

正如Xharze指出的那样,你必须指定控制器动作才能让MvcSiteMapProvider节点与MVC一起工作。

<mvcSiteMapNode title="MyApp" clickable="false">
   <mvcSiteMapNode title="Item1" controller="Item11" action="Index">
      <mvcSiteMapNode title="Item1.1" controller="Item11" action="Decimal1" />
      <mvcSiteMapNode title="Item1.2" controller="Item12" action="Decimal2" />
   </mvcSiteMapNode>
   ...
</mvcSiteMapNode>

MyApp节点不可点击的事实只是意味着它将是一个不可点击的分组节点,在这种情况下没有必要提供控制器或操作。

对于其他节点,控制器和操作参数必须对应于MVC控制器和操作。

public class Item1Controller : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult Decimal1()
    {
        return View();
    }

    public ActionResult Decimal2()
    {
        return View();
    }
}

例如,<mvcSiteMapNode title="Item1.1" controller="Item11" action="Decimal1" />节点将与上面的Decimal1操作方法相对应,因为控制器名称和操作名称都匹配。