【问题标题】:How to provide default url for mvcSiteMapNodes如何为 mvcSiteMapNode 提供默认 url
【发布时间】:2016-10-23 22:07:45
【问题描述】:

我有一些严格导航的节点。到目前为止,我已经通过使用“导航节点”路由并在仅导航节点上明确设置 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,并捕获一些事件或覆盖一些可以为节点生成 url 的方法。如您所见,这些节点的 url 可以从祖先和自身标题生成。

我不确定documentation 是否正在解决此功能。

【问题讨论】:

  • 不清楚您所说的“仅导航节点”是什么意思。所有节点都用于导航。
  • @NightOwl888,对不起。我的意思是,一个没有控制器或动作的节点。它最终所做的只是改变你在节点路径中的位置。类比是嵌套菜单,其中一些菜单项只是为了对其他菜单或命令进行分组,然后叶节点实际执行命令。这里的概念相同。

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


【解决方案1】:

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

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

您可能需要添加一个或两个custom attribute 以打开和关闭显示逻辑的特定部分,但这可以在SiteMap 中的“真实”(服务器端)导航位置中完成。

【讨论】:

  • 我会根据时间来试试这个。我正处于时间紧缩状态,我现在正在工作,但我同意数据库中没有 UI。我只是从没想过Mvc.sitemap 作为数据库;我认为这是一个类似于 web.config 的 UI 工件。
猜你喜欢
  • 2023-03-15
  • 1970-01-01
  • 2020-05-04
  • 1970-01-01
  • 2010-12-20
  • 2010-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多