问题标签 [mvcsitemapprovider]

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 投票
1 回答
440 浏览

mvcsitemapprovider - 在代码中将节点添加到 mvcsitemap

我正在构建一个简单的 CMS,它将导航/站点地图/站点结构存储在数据库表中。当应用程序启动时,我可以根据该表中的数据动态创建我的站点地图节点。

我遇到的问题是,在应用程序运行时将新记录添加到表中或更新现有记录时,我需要重建站点地图结构。看起来很简单,但我不知道怎么做。

0 投票
1 回答
874 浏览

asp.net-mvc-3 - 页面内的 MvcSiteMapProvider 子菜单

我有一个使用 MvcSiteMapProvider 进行主导航的网站。我遇到了一个我无法弄清楚的场景。

我的网站有以下导航:

导航截图

站点地图如下所示:

我一直无法弄清楚如何正确地利用站点地图可靠地进行侧选项卡导航。我还需要保持选中配置选项卡以及活动侧选项卡。

0 投票
2 回答
9876 浏览

asp.net-mvc - ASP.NET MVC SiteMap 提供程序——如何在实际菜单中“隐藏”单个项目

我在一个项目中使用 ASP.NET MVC SiteMap 提供程序,它运行良好。但是,我很难弄清楚如何隐藏菜单项。我想在全局导航中隐藏的菜单项是我的“站点地图”页面。现在我知道在 mvcSiteMapNode 上有一个VisibilityProvider可供我使用的东西 - 但我似乎无法弄清楚如何让它工作。

0 投票
0 回答
457 浏览

asp.net-mvc-3 - MvcSiteMap 仅显示根节点

我正在尝试使用 DynamicNodeProvider 在 MVC3 中创建多级站点地图。但只显示根节点。请指导我代码中的问题所在。我已经定义了一个类来覆盖 GetDynamicNodeCollection,如下所示:

在 Mvc.sitemap 我这样定义节点:

在 _Layout.cshtml 我有以下代码:

0 投票
1 回答
269 浏览

asp.net - MVCSiteMapProvider DynamicNode RouteValues 混淆

我面临一些问题,或者我很困惑。我按照以下链接生成动态站点地图:

MVSiteMapProvider 动态站点地图

node.RouteValues.Add("id", album.AlbumId);对上面链接中给出的课程感到困惑。我的网站链接不是他们讨论的示例中给出的形式(他们的 URL 类似于 mysite.com/controller?id=some id)

我的网址采用以下格式:

mysite.com/mycontroller/querystring1/querystring2/querystring3

我怎样才能“提及”这种类型的 URL,node.RouteValues.Add(..., ...);以便它应该重定向到 mysite.com/controller/querystring1/querystring2/querystring3?

谢谢

0 投票
1 回答
851 浏览

asp.net-mvc-3 - 生产时 MvcSiteMapProvider 中的 NullReferenceException

问题是我经常在生产站点(ASP.NET MVC 3)收到错误,但无法在本地重现此错误。异常的文本是:

我在本地没有这样的错误。这是我调用MvcSiteMap().SiteMapPath()方法的地方:

在此处输入图像描述

可能有人以前遇到过同样的问题。如果是这样,请分享您的解决方案。

提前致谢。

0 投票
4 回答
6043 浏览

asp.net-mvc-4 - MVC SiteMap - 当不同的节点指向同一个动作时 SiteMap.CurrentNode 没有映射到正确的路由

设置:

我正在使用带有 mvcSiteMapProvider 的 ASP.NET MVC 4 来管理我的菜单。

我有一个自定义菜单生成器,它评估一个节点是否在当前分支上(即,如果它SiteMap.CurrentNode是 CurrentNode 或 CurrentNode 是否嵌套在它下面)。代码包含在下面,但本质上是检查每个节点的 url 并将其与 currentnode 的 url 进行比较,直至 currentnodes “家谱”。

我的自定义菜单构建器使用 CurrentBranch 来添加一个突出显示 CurrentBranch 上的菜单项的类。

问题:

我的自定义菜单工作正常,但我发现mvcSiteMapProvider似乎并没有以一致的方式评估url的:CurrentNode

当两个节点指向同一个动作并且仅通过动作的一个参数来区分时,SiteMap.CurrentNode 似乎没有使用正确的路由(它忽略区分参数并默认为映射到定义的动作的第一个路由节点)。

问题示例:

在我拥有的应用程序中Members

成员具有MemberStatus可以是“未处理”、“活动”或“非活动”的字段。要更改 MemberStatus,我有一个ProcessMemberController名为 Admin 的区域。处理是使用 上的Process操作完成的ProcessMemberController

我的 mvcSiteMap 有两个节点都映射到Process动作。它们之间的唯一区别是alternate参数(例如我客户的域语义),在一种情况下具有“已处理”的值,而在另一种情况下具有“未处理”的值:

节点:

路线:

到这两个节点的对应路由是(同样,唯一能区分它们的是alternate 参数的值):

什么有效:

Html.ActionLink 助手使用路由并生成我期望的 url:

在这两种情况下,输出都是正确的,正如我所料。

什么不起作用:

假设我的请求涉及第二个选项,即 ,/Admin/Members/Status/Change/47对应于 alternate = "Processed" 和 MemberId 47。

调试我的静态 CurrentBranch 属性(见下文),我发现 SiteMap.CurrentNode 显示:

即,对于 /Admin/Members/Status/Change/47 的请求 url,SiteMap.CurrentNode.Url计算结果为/Admin/Unprocessed/Process/47. 即,它忽略了alternate参数并使用了错误的路线。

CurrentBranch 静态属性:

问题:

我究竟做错了什么?

正如我所料,这些路线由 Html.ActionLlink 解释,但不像我所料那样由 SiteMap.CurrentNode 评估。换句话说,在评估我的路线时,SiteMap.CurrentNode 忽略了可区分的备用参数。

0 投票
1 回答
45 浏览

mvcsitemapprovider - 将站点加载到容器中时使用 MVCSiteMap

我们目前将网站内容加载到主页上的容器中,并且从不重新加载整个网站。我们使用 jqAddress 进行深度链接。我的任务是创建一个在网站上使用的面包屑解决方案,并将 MVCSiteMap 视为一种解决方案。问题是当我们将内容加载到容器中并更改站点地图面包屑的地址时,由于页面没有重新呈现,因此我们只是将部分内容加载到视图容器中。我的想法是创建另一个部分并让 jqAddress 更改事件重新加载部分,但我不确定如何将所有数据获取到 SiteMap 帮助程序以告诉它我们刚刚去了哪里,以便它可以正确生成面包屑路径。任何帮助/想法将非常有义务。

提前致谢,

奥斯汀

0 投票
2 回答
530 浏览

asp.net-mvc - MvcSiteMapProvider 在页面渲染时未准备好,缓存问题?

tl;dr: 来自 MvcSiteMapProvider 的菜单有时无法在应用程序重新联机后呈现自身,即使代码运行并且菜单在页面刷新后呈现。

我在 ASP.NET MVC 3 项目中使用 MvcSiteMapProvider,偶尔在将应用程序从离线切换到在线后(通过将App_Offline.htm文件插入服务器的根目录并删除它),在页面刷新之前,菜单不会呈现任何内容。

我正在使用自定义 DynamicNodeProvider 从数据库中查询菜单项,然后呈现菜单。在调试时,我可以看到这段代码确实在页面加载之前运行,但页面上没有呈现菜单。我将缓存设置为几个小时,并且正在使用自定义缓存键以允许在某些操作后失效。

不幸的是,我无法始终如一地重现此错误。但是,如果我在 DynamicNodeProvider 的顶部添加一个睡眠,我可以让它更频繁地重现——它会在 60-70% 的时间里失败,睡眠时间超过 30 秒。到目前为止,我最好的猜测是它与缓存机制有关,因为将我的缓存持续时间设置为 0似乎可以使它没有问题,并且菜单总是弹出。但是,很难确定,因为问题很难确定。由于性能拖累,将其保留为 0 将不是一个可接受的解决方案。

这个问题的根本原因可能是什么?有没有人见过这种行为或有解决方法?

0 投票
2 回答
1548 浏览

asp.net-mvc - 如何使用基于代码的属性指定 MVC SiteMaps Visibility 属性?

我正在使用 MVC SiteMap 提供程序的最新 Nuget 包。我们正在大量使用基于代码的属性来定义我们站点中的节点。

例如[MvcSiteMapNode(Title = "Examination Types", ParentKey = "LookupTable", Key = "ExaminationTypeIndex")]

我们希望使用自定义可见性提供程序来隐藏 SiteMap 中的节点,如下所示

但是我们似乎无法使用基于代码的节点来指定节点可见性属性?有没有办法做到这一点。我们只能指定一个自定义可见性提供程序,我们宁愿使用 visible 属性。