问题标签 [asp.net-mvc-sitemap]

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 回答
471 浏览

c# - 自定义路由的 MVSitemapProvider 问题

我很难使用 MVCSitemapProvider 生成站点地图,我的情况是:

我有这个 :

我将其用作我的控制器的属性

问题是 sitemap.xml 包含以下内容:

我的路线映射到这个 URL: <loc>http://localhost:7872/#</loc>当我使用 route=Blog

它应该是这样的:localhost:7872/blog/idhere/friendurlName

该 URL 工作正常,但我正在尝试改进 SEO 和站点地图是非常必要的,我不知道如何设置它。有任何想法吗?

0 投票
1 回答
282 浏览

asp.net-mvc - 检查 .NET MVC 站点地图是否存在

我在用

显示当前页面的站点地图。如何检查当前页面的站点地图是否存在,然后只显示它?

喜欢:

0 投票
1 回答
920 浏览

asp.net-mvc - 来自另一个程序集的 MvcSiteMapProvider + Autofac + ISiteMapNodeVisibilityProvider

我很难弄清楚如何在 MvcSiteMapProvider 中使用 Autofac 注册自定义 ISiteMapNodeVisibilityProvider (SiteMapNodeVisibilityProviderBase)。

在我将可见性提供程序移至另一个程序集之前,一切都运行良好。现在,无论我尝试什么,我总是得到

找不到名为“MyWasWorkingVisibilityProvider, MyNewAssembly”的可见性提供程序实例。检查您的 DI 配置以确保具有此名称的可见性提供程序实例存在并且配置正确。

根据MvcSiteMapProvider文档和代码,看来我需要以某种方式进入SiteMapNodeVisibilityProviderStrategy......我想我已经在下面做到了......但我不是 Autofac 忍者。

MvcSiteMapProviderModule.cs,我在任何我能想到的地方都添加了新的程序集......

但它仍然不起作用。

值得一提的是,任何特定菜单项的可见性提供程序都在数据库中进行了配置,并且整个菜单结构都加载了一个动态节点提供程序,该提供程序现在也位于与我移动可见性提供程序的位置相同的程序集中。动态节点提供程序显然正在工作,因为它一直到尝试加载可见性提供程序的地步。

我认为https://github.com/maartenba/MvcSiteMapProvider/issues/237看起来很有帮助,我无法编译可见性提供程序特定的代码..

另一个没有任何效果的例子:MVC Site Map Provider - SiteMapPath Performance Very Slow?

所以我现在被困住了。我不是 Autofac 或 MvcSiteMap 提供程序的向导,但是,就像我说的,在我将可见性提供程序移动到另一个程序集之前,一切正常。

非常感谢您的时间和关注!在这一点上我很沮丧。

0 投票
0 回答
50 浏览

video-streaming - 如何使用 azure 媒体流服务将视频节点添加到我的站点地图?

我正在尝试为我的新网站创建站点地图。

我正在使用 azure 媒体服务对我的视频进行编码,它提供了 10 个不同的消费端点(几个用于不同的连接速度,即 video/mp4、application/vnd.ms-sstr+xml、application/dash+xml、application/vnd.苹果.mpegurl)。

如何为每个视频登录页面将所有这些源添加到我的 site.xml 中的视频节点?

0 投票
1 回答
1978 浏览

asp.net-mvc - 使用动作参数作为 mvcsitemap 中的节点

我的自定义路线是:

Mvc.sitemap是:

我的Index功能是:

  1. 没有preservedRouteParameters显示节点。为什么?
  2. 如何显示节点,如下所述。

网址:http://localhost:59328/Home/Index/mobiles

预期的站点地图:Home > mobiles

网址:http://localhost:59328/Home/Index/mobiles/htc

预期的站点地图:Home > mobiles > htc

网址:http://localhost:59328/Home/Index/mobiles/htc/m8

预期的站点地图:Home > mobiles > htc > m8

网址:http://localhost:59328/Home/Index/mobiles/htc/m8/12/title
预期的站点地图:(Home > mobiles > htc > m8 > title注意 id 不包含在站点地图中)

但实际的站点地图总是Home

0 投票
1 回答
134 浏览

asp.net-mvc-4 - MvcSiteMap 面包屑在视图中不可见

我有两个类似的视图,其中 MVCSiteMap 面包屑是不可见的。在其他页面上,相同的代码有效。请帮助我弄清楚为什么这两个视图不显示面包屑。Mvc站点地图代码:

控制器中的代码(教育):

控制器中的代码(社交):

在视图中,我有下一个代码:

非常感谢

0 投票
1 回答
577 浏览

unit-testing - 单元测试使用 SiteMaps.Current.CurrentNode 的 MVC 5 控制器

我们有一些控制器操作将面包屑节点的标题更改为用户正在查看的项目的值,例如

这在正常查看网站时工作正常,并且表现出我们想要的样子..

但是......当尝试使用 Moq 和 FluentMVCTesting 对控制器操作进行单元测试时,我们遇到了错误。

http://www.shiningtreasures.com/post/2013/08/14/mvcsitemapprovider-4-unit-testing-with-the-sitemaps-static-methods我们添加了SiteMaps.Loader = new Mock<ISiteMapLoader>().Object;例如

创建控制器上下文

为每个测试初始化​​控制器

然后是测试本身

我们收到以下错误System.NullReferenceException:对象引用未设置为对象的实例。指的是var node = SiteMaps.Current.CurrentNode;

然后我们添加另一个测试

并获取MvcSiteMapProvider.MvcSiteMapException: 站点地图加载器只能在 Global.asax 的 Application_Start 事件中设置,不得再次设置。如果您使用的是外部依赖注入容器,请将 web.config 文件的 AppSettings 部分中的“MvcSiteMapProvider_UseExternalDIContainer”设置为“true”。在 MvcSiteMapProvider.SiteMaps.set_Loader(ISiteMapLoader 值)

然后SiteMaps.Loader = new Mock<ISiteMapLoader>().Object;进入测试初始化​​,例如

我们得到相同的错误MvcSiteMapProvider.MvcSiteMapException: 站点地图加载器只能在 Global.asax 的 Application_Start 事件中设置,不得再次设置。如果您使用的是外部依赖注入容器,请将 web.config 文件的 AppSettings 部分中的“MvcSiteMapProvider_UseExternalDIContainer”设置为“true”。在 MvcSiteMapProvider.SiteMaps.set_Loader(ISiteMapLoader 值)

SiteMaps.Loader = new Mock<ISiteMapLoader>().Object;问题 -当您测试多个操作时,单元测试中的最佳位置在哪里

问题 - 在控制器中使用静态var node = SiteMaps.Current.CurrentNode;是最好的方法,还是有更好的方法(我们使用 Unity)

谢谢你的帮助

0 投票
1 回答
763 浏览

asp.net-mvc - SiteMapNode 是只读的,不能修改属性“Url”

我使用 MvcSiteMapProvider(Nuget 包 MvcSiteMapProvider.MVC5(版本 4.6.22))为我的网站设置 MVC 面包屑。

它工作正常。

然后我想动态更新站点地图的网址,例如:

然后我得到了这个错误:

SiteMapNode 是只读的,不能修改属性“Url”

请注意,我仍然可以更新标题:

任何的想法?

0 投票
1 回答
169 浏览

asp.net-mvc-sitemap - 无法根据用户类型呈现 Html MvcSiteMap 节点

我有两种用户类型
- -Admin
-Visitor
如果用户类型是“访问者”,那么 Sub1 节点将不会出现在菜单中。但下面的代码无法隐藏/删除特定节点。
我的站点地图如下所示:

从我调用的 Layout.cshtml

0 投票
1 回答
525 浏览

c# - @Html.MvcSiteMap().SiteMapPath() 异常:“不明确的控制器。发现多个控制器类型

我正在使用@Html.MvcSiteMap().SiteMapPath()构建面包屑路径。

我有两个控制器,一个是从 DealsContorllerBase 类继承的 DealsController。这两个类都有自己的 Index() 方法,其中子类的 Index() 覆盖了父类的 Index()。在我的 Mvc.sitemap 中:

在 RegisterRoute 函数中:

...

...

在“InvestX.UI.Web”项目中定义的 DealsController 和在“InvestX.UI.Controllers”项目中定义的 DealsControllerBase。

整个例外是这样的:

模棱两可的控制器。为“DealsController”找到了多种控制器类型。匹配的类型是:

InvestX.UI.Web.Controllers.DealsController InvestX.UI.Controllers.DealsControllerBase`1

考虑通过将控制器命名空间添加到 ControllerBuilder.Current.DefaultNamespaces 来缩小搜索范围,或者通过将命名空间添加到 ControllerTypeResolverFactory 的 areaNamespacesToIgnore 参数来排除命名空间。

我知道如果 DealsController 不是从 DealsControllerBase 继承而只是使用 DealsController,一切都会好起来的。异常是由要采取的 Index() 操作引起的:DealsController 的或 DealsControllerBase 的。我的问题是 mvcSiteMapNode 如何处理这样的父/子控制器层次结构?