问题标签 [sitemapprovider]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1300 浏览

asp.net - 仅使用角色属性进行站点地图安全修整,而不是在其他地方允许/拒绝规则

我知道标签具有“roles”属性来弥补没有“url”属性的节点,可以通过其他方式解决。不过,我对这些其他方式不感兴趣,我想在我的站点地图文件中设置我的所有权限。如何做到这一点?

我正在使用自定义 RoleProvider、自定义 MembershipProvider 和默认 XmlSiteMapProvider。我还有一个安全 IHttpModule 来防止人们使用直接 URL 到达那里。我对不同的方法持开放态度。

提前致谢!

0 投票
1 回答
2620 浏览

asp.net - Sharepoint:用于自定义列表的自定义 SiteMapProvider

我需要自定义 SiteMapNodes 的 title 属性。

我正在使用 WSS,并创建了一个自定义文档库。在浏览此库时,我想更改列表名称上方显示的面包屑中节点的名称。

到目前为止,我有:

  • 创建了一个继承自 System.Web.SiteMapProvider 的类,
  • 将我的课程添加到 web.config,
  • 将 sharepoint default.master 页面站点地图路径(在 PlaceHolderTitleBreadcrumb 中)更改为指向我的新站点地图提供程序。

然后我覆盖了 CurrentNode 属性以使用所需的名称编辑 CurrentNode.title。

我的问题是所有以前的节点(父节点)都恢复为原来的名称。如何编辑面包屑,以便导航的所有节点都保留其新标题?

任何建议或方向将不胜感激。

0 投票
1 回答
1534 浏览

asp.net - MasterPage 上的 ASP.Net TreeView 控件并不总是被填充

我正在处理我的第一个 ASP.Net 项目,我似乎马上就陷入了困境。我所有的站点文件都存储在数据库中,因此我使用 VirtualPathProvider 来访问它们。这部分工作得很好,但是我需要一个站点地图,它可以动态获取所有文件,因为用户将在他们去的时候添加/删除文件。为此,我创建了一个继承 StaticSiteMapProvider 的类,在我的母版页上创建了一个 SiteMapDataSource,以及一个使用它的 TreeView。在大多数情况下,这是可行的。当您加载页面时,您会看到 TreeView 并且它包含它应该包含的所有节点。但是,TreeView 时不时地是完全空白的——根本没有节点。我什至将 TreeView 复制到内容页面中。内容页面 TreeView 始终有效,即使 MasterPage 不可用。(我也没有

为了调试它,我在 SiteMapProvider 的 BuildSiteMap() 函数中放置了一个抛出异常,只是为了向自己证明代码实际上正在运行。我发现每次都会遇到异常。但是,堆栈跟踪每次都不相同。

大多数时候,这就是我得到的:

然而,就像 TreeView 经常出现空白一样,我得到了这个:

我想有用的代码是 BuildSiteMap 函数:

AddFolders() 和 AddFiles() 只是做更多相同的事情,所以为了简洁起见,我会将它们排除在外,除非有人认为它们很重要。

我试图在此处发布树视图的代码,但该网站似乎并不喜欢那样。我会说我正在设置 DataSourceID 属性,而不是在运行时分配它。两种方法我都试过了,好像没什么区别。

我不确定还有什么有用的,所以如果您需要更多详细信息,请告诉我。

现在我想知道这是否可能是我的问题的线索,或者这只是一个巧合。如果这是一个线索,我太密集了,无法弄清楚。这对其他人有意义吗?

0 投票
4 回答
7014 浏览

.net - 动态更改 SiteMapNode 的标题

我们有一个网站使用沼泽标准默认站点地图和安全调整,如下所示:

一切都很好,但是已经收到了Title根据某些后端标准更改一个节点的请求。听起来很简单,但显然不是。

尝试 1 - 处理SiteMapResolve事件。在哪里处理这个事件似乎并不重要,我Global.asax只是因为那是我尝试过的地方之一并且它有效,所以我展示了它。

当导航到相关页面时,这工作正常,但不幸的是,站点导航的一部分涉及一个组合框,该组合框与站点地图数据绑定,如下所示:

呈现此菜单时,SiteMapResolve不会为任何内容触发事件,因为当前节点是定义菜单的页面。结果,菜单显示物理站点地图文件中的无意义占位符标题,而不是正确的标题。

尝试 2 - 编写我自己的站点地图提供程序。我不想复制所有默认行为,所以我尝试从默认提供程序派生如下。

这不起作用,因为GetChildNodes在网站上导航时似乎并不经常被调用。

尝试 3 - 尝试在数据加载到内存后立即修复数据,而不是在访问数据时修复。

这似乎有效。但是,我担心方法GetAllNodes中的调用BuildSiteMap。将所有数据递归地拉入内存只是为了修复一个值对我来说似乎是错误的。另外,我无法控制何时BuildSiteMap调用。我更喜欢尝试 1 的东西,它在第一次需要节点数据时按需调用。

尝试 4(新) - 与尝试 2 类似,但覆盖所有与读取数据有关的虚拟成员(CurrentNode, FindSiteMapNode, FindSiteMapNodeFromKey, GetChildNodes, GetCurrentNodeAndHintAncestorNodes, GetCurrentNodeAndHintNeighborhoodNodes, GetParentNode, GetParentNodeRelativeToCurrentNodeAndHintDownFromParent, GetParentNodeRelativeToNodeAndHintDownFromParent, HintAncestorNodes, HintNeighborhoodNodes),以尝试在某处拦截动态节点的读取。

这没有用。我将调试语句放在所有被覆盖的成员中,当数据绑定到下拉列表时,似乎根本没有调用它们。我能想到的唯一解释是在BuildSiteMap调用过程中所有节点都被一次性读入内存,因此SiteMapNode在枚举子节点时不会碰到提供程序类。

有没有人有更好的建议?

0 投票
1 回答
4213 浏览

asp.net - ASP.NET:自定义动态填充的站点地图 (SiteMapProvider)

我正在尝试编写我的第一个自己的SiteMapProvider子类。它旨在使用一堆不同的数据库查找来动态填充,就像我在网上找到的所有示例一样。

但是,有很多事情对我来说很不清楚。这是我的两个第一个问题:

  • 为什么StaticSiteMapProvider在几乎每个人的项目中都使用而不是SiteMapProvider? 由于该类包含名称“静态”,我得到的印象是它不像我想要的那样......嗯,动态的。
  • 有人可以为我提供一个超级简约的SiteMapProvider子类,它只使用静态数据填充地图,即没有数据库访问等?
0 投票
1 回答
594 浏览

asp.net-mvc - 混合站点地图和动态(数据库)页面?

我的网站有一个静态的.sitemap文件。我想为每个主类别(@Products )添加 5 个子类别,以便它们出现在我的菜单中(菜单是自定义帮助程序,它可以工作,我只需要在运行时添加到某些页面......)这可能吗?Sitemap.Provider

网站地图:

0 投票
1 回答
342 浏览

asp.net-mvc - 如何使用高效的 Route 和 ASP.NET Sitemap 对这种导航场景进行建模?

我需要为以下场景建模,但我无法让它与 MvcSitemapProvider 一起使用(我认为我的问题也直接映射到默认的 SiteMapProvider)。我想让默认的面包屑控件与我的动态数据一起正常工作。

我有一个列表,products其中category包含一个parent-category

  • 父类别
    • 类别
      • 产品

我希望能够使用以下网址:

(1) /Products
(2) /Products/MainCategory
(3) /Products/MainCategory/Category
(4) /Products/MainCategory/Category/Product

显然我下面的解决方案不是最优的。

站点地图中的Products节点没有子节点,因此它们不会出现在我的菜单中。

我创建了一个中间对象,它添加了主类别和类别,以便它们显示在我的菜单中。但这不会解决问题,因为其他控件(面包屑)只是说我在 /Products 上。

我应该更改路线还是更改站点地图定义?或者也许是别的什么?


我目前有以下内容:

  • 2 路由
    1 用于 /Products、/Products/MainCategory 和 /Products/MainCategory/Category -> 映射到 ProductsController.Index()
    1 用于 /Products/MainCategory/Category/Product -> 映射到 ProductsController.Product()
  • 站点地图中有 1 个条目,
    其中定义了动态参数 (MainCategory;Category)

Global.asax 路由定义:

我的站点地图中有以下条目:

0 投票
2 回答
4184 浏览

asp.net - 站点地图和 URL 路由

我有一个类似于此处描述的问题:
ASP.NET URL Routing with WebForms - Using the SiteMap

我的 ASP.Net WebForms web 应用程序有一个站点地图,类似于:

我希望网址采用以下格式::
//host/projects/{company}/{projectno}/Home
://host/projects/microsoft/10/Home
://host/projects/microsoft/ 11/报告
://host/projects/apple/10/ExtraReports

Url 路由将 /projects/{company}/{projectno}/{pagename} 路由到 /Pages/{pagename}.aspx。

我的导航由顶部的 TabStrip 组成,其中应包含Home、Reports 和 Presentations,左侧的菜单及其子项(例如,选择 Home 时应该是:Home、Faq)。

我的问题:

  1. 处理重复的 SiteMapNode url 的正确方法是什么?

  2. 如何防止 TabStrip 生成如下网址:://host/Home 和 ://host/ExtraReports?
    我需要维护当前的公司和项目没有选择,并且站点地图忽略了相对 url

  3. TabStrip 和 Menu 控件需要识别所选项目以显示活动选择。所有这一切的正确解决方案是什么?

0 投票
1 回答
639 浏览

.net - .NET 来自数据库的本地化站点地图?

我有一个自定义站点地图提供程序,它从数据库加载页面。

页面(pageid、fk_pageid(父)、标题、url、show_in_menu)

我想全球化/本地化title页面。最好的方法是什么?

0 投票
1 回答
1679 浏览

asp.net - 根据 Roles/Web.sitemap 文件显示/隐藏自定义菜单项

我有一个自定义菜单,它利用了标准的 asp.net 站点地图。它运行良好,但我的一些页面是由 URL 重写器动态生成的,因此它们不位于站点地图 XML 文件中。目前,我推出了一个自定义解决方案,该解决方案通过 CSS 类显示/隐藏菜单项,并以编程方式检查用户所在的角色。在我访问站点地图文件中不存在的动态页面之前,它可以正常工作。我已经尝试使用安全修剪在站点地图文件中使用“角色”属性,但它不起作用,因为我有一个自定义菜单。

有没有一种方法可以利用站点地图文件中的角色属性来显示/隐藏下面我的自定义控件的菜单项,即使某些页面不在站点地图中?我的菜单控件如下...