如何为mvcSiteMapNodes提供默认URL

时间:2016-10-23 22:07:46

标签: asp.net-mvc-5 dry mvcsitemapprovider

我有一些严格导航的节点。到目前为止,我通过使用"导航节点"来处理这个问题。路由并在仅导航节点上显式设置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文件。您可以看到这些节点的URL可以从祖先和自我标题中生成。

我不确定documentation是否正在解决此问题。

1 个答案:

答案 0 :(得分:0)

如果菜单中的节点仅存在于客户端,那么您根本不应将它们放入SiteMapSiteMap有点像分层数据库 - 您不应该在数据库中放置任何UI逻辑。

相反,您应该在/Views/Shared/DisplayTemplates/文件夹中编辑显示模板(或为不同的方案创建不同的模板)。这些模板的目的是让您可以控制HTML帮助程序输出的HTML。

您可能需要添加When to use LinkedList over ArrayList?或两个才能打开和关闭显示逻辑的特定部分,但这可以在您{{{“中的”真实“(服务器端)导航位置之间完成1}}。