1

我正在使用这个库:https ://github.com/maartenba/MvcSiteMapProvider

我想要一个这样的菜单结构:

<ul>
    <li><a href="/">Home</a></li>
    <li>
        <a href="#">Stuff</a>
        <ul>
            <li><a href="/Stuff/"<li>
            <li><a href="/Stuff/Add"<li>
        </ul>
    </li>
</ul>

我正在使用没有 xml 的 MvcSiteMapNode;只是以装饰者的方式。

所以我有这个控制器:

[MvcSiteMapNode(Title = "Stuff", ParentKey = "root", Key = "stuff-key", Url = "#", ImageUrl = "fa-stuff")] 
public class StuffController : Controller {

    [MvcSiteMapNode(Title = "List", ParentKey = "stuff-key", Key = "stuff-list")]
    public ActionResult Index(){}

    [MvcSiteMapNode(Title = "Add", ParentKey = "stuff-key", Key = "stuff-add")]
    public ActionResult Add(){}
}

我的问题是,当我获取 url /Stuff/ 时,未选择索引节点,而仅选择了父节点(stuff-key)。即使我 GET /Stuff/Index 发生同样的情况。

4

1 回答 1

2

这里有2个问题:

  1. 您刚刚发现了一个错误(谢谢),当明确设置 URL 或节点不可点击时,它允许匹配路由值。
  2. 字符“#”在技术上不允许作为 URL。可以,但这会产生转到“/#”(主页)的效果,这可能不是您想要的。

我猜第二个问题是你想为分组目的创建一个节点,在这种情况下,它应该是不可点击的。

[MvcSiteMapNode(Title = "Stuff", ParentKey = "root", Key = "stuff-key", Clickable = false, ImageUrl = "fa-stuff")] 

这使它为“Stuff”生成纯文本,而不是超链接。

<ul id="menu">
    <li>
        <a href="/" title="Home">Home</a>
    </li>
    <li>
        Stuff
        <ul>
            <li>
                <a href="/Stuff" title="List">List</a>
            </li>
            <li>
                <a href="/Stuff/Add" title="Add">Add</a>
            </li>
        </ul>        
    </li>
</ul>

但是,请注意,在我发布补丁之前,匹配问题不会消失。因此,在高于 4.5.1 的版本可用之前,它无法正常工作。

于 2014-02-28T10:09:10.280 回答