MvcSiteMapProvider菜单与过滤器中的控制器类属性在Asp.Net 5的mvc(Mvc

2019-09-28 12:54发布

我用这LIB: 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>

我使用MvcSiteMapNode没有XML; 只是装饰的方式。

所以我有这样的控制器:

[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(){}
}

我的问题是,当我得到的网址/东西/索引节点未选中,并且只选择父节点(东西键)。 甚至当我GET /东西/索引发生一样。

Answer 1:

这里有两个问题:

  1. 有(感谢),它允许在路由值匹配时,URL设置明确指出你刚才发现了一个bug或者当节点是不可点击。
  2. 字符“#”在技术上并不允许是一个URL。 你可以,但是这将有去“/#”(主页),这可能不是你想要的效果。

我猜你想使一个节点进行分组的目的,在这种情况下,应当由非可点击的第二个问题。

[MvcSiteMapNode(Title = "Stuff", ParentKey = "root", Key = "stuff-key", Clickable = false, ImageUrl = "fa-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更高版本。



文章来源: MvcSiteMapProvider Menu with Filter Attributes in the Controller Class in Asp.Net Mvc 5