如何为 mvcSiteMapNodes 提供默认 url
How to provide default url for mvcSiteMapNodes
我有一些节点是严格导航的。到目前为止,我已经通过使用 "navigation node" 路线并在仅导航节点上显式设置 url (~/Home/*
) 来处理此问题。它工作正常。这允许我拥有一个菜单层次结构,而不必为每个仅导航菜单项(这将是愚蠢的)添加虚拟,同时允许它们显示在菜单和面包屑层次结构中。
Mvc.sitemap
<mvcSiteMapNode title="Home" controller="Home" action="Index" >
<mvcSiteMapNode title="Products" url="~/Home/Products" roles="*">
<mvcSiteMapNode title="Shampoo MAX" url="~/Home/Products/ShampooMAX" >
<mvcSiteMapNode title="Policies" controller="Object" action="List" type="Policy" >
</mvcSiteMapNode>
<mvcSiteMapNode title="Quotes" controller="Object" action="List" >
</mvcSiteMapNode>
<mvcSiteMapNode title="Claims" controller="Object" action="List">
</mvcSiteMapNode>
</mvcSiteMapNode>
</mvcSiteMapNode>
<mvcSiteMapNode title="Documents" controller="Document" action="Index" />
<mvcSiteMapNode title="Forms" controller="Form" action="Index"/>
<mvcSiteMapNode title="Links" url="~/Home/Links" roles="*">
<mvcSiteMapNode url="https://interfarina.com/login#login" targetFrame="_blank" title="Quoting" roles="*"/>
<mvcSiteMapNode url="https://drive.google.com/file/d/asdfsdfsdfsdfs/view" targetFrame="_blank" title="Downloadable App" roles="*"/>
<mvcSiteMapNode url="https://gumbysafety.com/app/user/login" targetFrame="_blank" title="Sales Tools" roles="*"/>
</mvcSiteMapNode>
</mvcSiteMapNode>
RouteConfig.cs
routes.MapRoute(
name: "Navigation-Only Node",
url: "Home/{*url}",
defaults: new { controller = "Home", action = "Index" }
);
我想稍微清理一下我的 Mvc.sitemap
文件,方法是从仅导航节点中删除所有 urls 并捕获一些事件或覆盖一些我可以在其中生成 url 为节点。如您所见,这些节点的 url 可以从祖先和自身头衔生成。
我不确定 documentation 是否解决了这个问题。
如果您的菜单中有仅存在于客户端的节点,那么您根本不应该将它们放入 SiteMap
。 SiteMap
有点像分层数据库 - 你不应该在数据库中放置任何 UI 逻辑。
相反,您应该在 /Views/Shared/DisplayTemplates/
文件夹中编辑显示模板(或为不同的场景创建不同的模板)。这些模板的目的是让您可以控制 HTML 助手输出的 HTML。
您可能需要添加一两个 custom attribute 以打开和关闭显示逻辑的特定部分,但这可以在 "real"(服务器端)导航位置之间完成在你的 SiteMap
.
我有一些节点是严格导航的。到目前为止,我已经通过使用 "navigation node" 路线并在仅导航节点上显式设置 url (~/Home/*
) 来处理此问题。它工作正常。这允许我拥有一个菜单层次结构,而不必为每个仅导航菜单项(这将是愚蠢的)添加虚拟,同时允许它们显示在菜单和面包屑层次结构中。
Mvc.sitemap
<mvcSiteMapNode title="Home" controller="Home" action="Index" >
<mvcSiteMapNode title="Products" url="~/Home/Products" roles="*">
<mvcSiteMapNode title="Shampoo MAX" url="~/Home/Products/ShampooMAX" >
<mvcSiteMapNode title="Policies" controller="Object" action="List" type="Policy" >
</mvcSiteMapNode>
<mvcSiteMapNode title="Quotes" controller="Object" action="List" >
</mvcSiteMapNode>
<mvcSiteMapNode title="Claims" controller="Object" action="List">
</mvcSiteMapNode>
</mvcSiteMapNode>
</mvcSiteMapNode>
<mvcSiteMapNode title="Documents" controller="Document" action="Index" />
<mvcSiteMapNode title="Forms" controller="Form" action="Index"/>
<mvcSiteMapNode title="Links" url="~/Home/Links" roles="*">
<mvcSiteMapNode url="https://interfarina.com/login#login" targetFrame="_blank" title="Quoting" roles="*"/>
<mvcSiteMapNode url="https://drive.google.com/file/d/asdfsdfsdfsdfs/view" targetFrame="_blank" title="Downloadable App" roles="*"/>
<mvcSiteMapNode url="https://gumbysafety.com/app/user/login" targetFrame="_blank" title="Sales Tools" roles="*"/>
</mvcSiteMapNode>
</mvcSiteMapNode>
RouteConfig.cs
routes.MapRoute(
name: "Navigation-Only Node",
url: "Home/{*url}",
defaults: new { controller = "Home", action = "Index" }
);
我想稍微清理一下我的 Mvc.sitemap
文件,方法是从仅导航节点中删除所有 urls 并捕获一些事件或覆盖一些我可以在其中生成 url 为节点。如您所见,这些节点的 url 可以从祖先和自身头衔生成。
我不确定 documentation 是否解决了这个问题。
如果您的菜单中有仅存在于客户端的节点,那么您根本不应该将它们放入 SiteMap
。 SiteMap
有点像分层数据库 - 你不应该在数据库中放置任何 UI 逻辑。
相反,您应该在 /Views/Shared/DisplayTemplates/
文件夹中编辑显示模板(或为不同的场景创建不同的模板)。这些模板的目的是让您可以控制 HTML 助手输出的 HTML。
您可能需要添加一两个 custom attribute 以打开和关闭显示逻辑的特定部分,但这可以在 "real"(服务器端)导航位置之间完成在你的 SiteMap
.