- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 ASP.Net MVC 5 应用程序中使用 MVCSiteMapProvider。可以找到很多资源和教程,但其中大多数是关于基于 XML 的配置。
在我的应用程序中,属性路由已被使用,我想将 MvcSiteMapProvider 与属性一起使用,但是关于这种组合的资源不足,我遇到了一些问题。
例如,我有如下三个操作:
//HomeController
[Route(@"~/home", Name = "CustomerHomeIndex")]
[MvcSiteMapNode(Title = "Home Page", Key = "Home")]
public ActionResult Index() {
return View()
}
//AccountController
[Route(@"~/account", Name = "AccountIndex")]
[MvcSiteMapNode(Title = "Accounts", ParentKey = "Home", Key = "AccountIndex")]
public ActionResult Index() {
// fetching records from database
return View();
}
[Route(@"~/account-management/{id:int}/{domain:regex(^([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$)}", Name = "AccountDetail")]
[MvcSiteMapNode(Title = "Account Detail", ParentKey = "AccountIndex", Key = "AccountDetail")]
public ActionResult Details(string domain, int id) {
// fetching record from database by parameters
return View();
}
我还在我的 View 中添加了 SiteMapPath 代码
//Details.cshtml
@Html.MvcSiteMap().SiteMapPath()
但是没有显示任何结果。在我看来,它与 preservedRouteParameters
有关,但我找不到有关具有属性路由的 MvcSiteMapNode
属性中使用的此参数的任何信息。
实际上我还有一个关于本地化的问题,我想从资源文件中获取标题,所有内容都已经存在于全局资源文件中。我读过一些有关本地化支持的内容,但它们也与基于 XML 的配置相关。
最佳答案
默认情况下,XML 和 .NET 属性的提供程序均已启用。在此配置中,根节点(没有父键的节点)必须放置在 XML 文件中。要仅使用 .NET 属性而不在 XML 中进行任何配置,您需要从配置中删除 XML 节点提供程序。
内部DI:
<appSettings>
<add key="MvcSiteMapProvider_EnableSiteMapFile" value="false"/>
</appSettings>
外部 DI(所示为 StructureMap 示例):
// Register the sitemap node providers
var siteMapNodeProvider = this.For<ISiteMapNodeProvider>().Use<CompositeSiteMapNodeProvider>()
.EnumerableOf<ISiteMapNodeProvider>().Contains(x =>
{
//Remove the XmlSiteMapNodeProvider
//x.Type<XmlSiteMapNodeProvider>()
// .Ctor<bool>("includeRootNode").Is(true)
// .Ctor<bool>("useNestedDynamicNodeRecursion").Is(false)
// .Ctor<IXmlSource>().Is(xmlSource);
x.Type<ReflectionSiteMapNodeProvider>()
.Ctor<IEnumerable<string>>("includeAssemblies").Is(includeAssembliesForScan)
.Ctor<IEnumerable<string>>("excludeAssemblies").Is(new string[0]);
});
您还需要确保带有 Controller 的程序集包含在 IncludeAssembliesForScan 配置设置中。请注意,NuGet 包自动包含您安装 MvcSiteMapProvider 的程序集,因此,如果您的 Controller 全部位于主 MVC 项目中,则无需触及此程序集。
内部DI:
<appSettings>
<add key="MvcSiteMapProvider_IncludeAssembliesForScan" value="MyAssembly,MyOtherAssembly"/>
</appSettings>
外部DI:
string[] includeAssembliesForScan = new string[] { "MyAssembly", "MyOtherAssembly" };
... Other code omitted ...
// Register the sitemap node providers
var siteMapNodeProvider = this.For<ISiteMapNodeProvider>().Use<CompositeSiteMapNodeProvider>()
.EnumerableOf<ISiteMapNodeProvider>().Contains(x =>
{
//Remove the XmlSiteMapNodeProvider
//x.Type<XmlSiteMapNodeProvider>()
// .Ctor<bool>("includeRootNode").Is(true)
// .Ctor<bool>("useNestedDynamicNodeRecursion").Is(false)
// .Ctor<IXmlSource>().Is(xmlSource);
x.Type<ReflectionSiteMapNodeProvider>()
.Ctor<IEnumerable<string>>("includeAssemblies").Is(includeAssembliesForScan) // <- Setting is injected here
.Ctor<IEnumerable<string>>("excludeAssemblies").Is(new string[0]);
});
您无需做任何特殊操作即可使其与 AttributeRouting 一起使用 - MvcSiteMapProvider 会自动选取这些路由,因此只要您正确配置它们并在 MVC 中工作,它就应该可以正常工作。
是的,您可能确实需要对包含自定义参数的操作使用 PreservedRouteParameters,如下所示。
[Route(@"~/account-management/{id:int}/{domain:regex(^([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$)}", Name = "AccountDetail")]
[MvcSiteMapNode(Title = "Account Detail", ParentKey = "AccountIndex", Key = "AccountDetail", PreservedRouteParameters="domain,id")]
public ActionResult Details(string domain, int id) {
// fetching record from database by parameters
return View();
}
在您的简单示例中,这可以正常工作。但是,您需要充分了解servedRouteParameters 的工作原理,以便在嵌套超出第一个节点的节点级别时正确使用它们。您不能使用具有相同键名称但具有不同含义的参数,这些参数在同一请求中都可见,因为 MvcSiteMapProvider 始终将当前请求中的值插入到具有匹配键名称的所有节点中。您还必须在(子节点的)请求中提供祖先节点所需的任何键,以便导航正常工作。请参阅How to Make MvcSiteMapProvider Remember a User's Position和演示代码以获取完整的详细信息。
请参阅 reading localization from an external assembly 。但是,请注意,从 v4.6.15 开始,唯一可能的方法是使用外部 DI 容器来注入(inject)自定义 IStringLocalizer。
默认本地化实现仅支持放入 App_GlobalResources 文件夹中的文件。请注意,这是 problematic with MVC因为添加这些文件时的默认设置使它们以无法从 MVC 访问的方式进行编译。我们目前是gathering requirements to make a new extension point允许从备用位置配置资源。
关于asp.net-mvc - 将 MvcSiteMapProvider 与属性和属性路由结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25682481/
根据 Google 在 Video sitemaps 中的定义,有一些xml标签应该添加到视频的站点地图中,应该是这样的: http://www.example.com/videos/some_
目前,我有一个 Controller与 Index()需要授权的 Action 方法: public partial class CustomerController : BaseDocumentSt
如果当前 session IP 在以色列,我想从菜单中隐藏某个页面。这是我尝试过的方法,但实际上菜单项没有出现在任何地方。 我测试了 GeoIP 提供商,它似乎工作正常,我做错了什么? 下面是我如何创
我想用 CSS 类标记当前节点及其父节点。我四处搜索并找到了这些链接: http://mvcsitemap.codeplex.com/discussions/257786 http://mvcsite
我正在尝试为我的站点开发站点地图,以便在需要时维护 URL 参数。我正在使用 MvcSiteMapProvider 并尝试使用动态节点来保存各种节点的路由数据。但是,我遇到的问题是动态节点的子节点。当
我有一个可以采用可选 id 参数的操作方法。 public ActionResult Details(int id = 0) {...} 以及一个应该链接到具有空 ID 的操作方法的站点节点。 不
现在我有 Mvc.sitemap xml 文件,其中包含以下数据: 我想将所有这些节点存储在数据库中,并且只有一个非根节点,如下所示:
Mvc 5、.Net 4.5 我按如下方式实现 MvcSiteMapNodeAttribute: [MvcSiteMapNode(Title="Running Events", ParentKey="
MvcSiteMapProvider 似乎会自动缓存。是否有禁用缓存的机制?我们编写了自定义缓存例程,我想通过这些例程运行它,而不是依赖任何内置的缓存机制。 最佳答案 尝试在呈现菜单或站点地图之前调用
我正在使用 wcf 服务数据层开发类似网上商店的 asp.net mvc 4 网站。我的应用程序是用主类别、子类别和产品构建的。每个产品只能属于一个子类别,我的网址是这样的: /maincategor
我希望能够显示当前节点的父节点的标题。 站点地图: 因此,在“第 1 页”上,我可以使用以下方法显示标题(某页): Html.MvcSiteMap().Si
尝试运行/调试应用程序时出现以下错误 CS0246:找不到类型或 namespace 名称“MvcSiteMapProvider”(您是否缺少using指令或程序集引用?) 在我的Web.Config
我在安装 mvc 的 sitemapprovider 时遇到此错误: Install-Package : Updating 'Microsoft.AspNet.Razor 3.2.2' to 'Mic
在我的 MVC3 项目中,我安装了 Maartenba 的 MvcSiteMapProvider v.3.2.1,并且我创建了一个非常简单的静态两级菜单。下面是概念图结构。 - Home - Memb
我尝试以几乎任何方式本地化 MvcSiteMapProvider,但我不明白。正如我发现的,当您使用 app_globalresources 文件夹时它可以工作,但如果您使用 MVC,则这不是一个选项
我已经安装了 MvcSiteMapProvider v4,现在我想动态加载站点地图。我的需求很简单——根据当前登录的用户角色,例如在每个页面请求上加载 XML 站点地图。 AdminSiteMap.x
我正在尝试构建这样的菜单: 作为引用,我正在使用这个库 https://github.com/behigh/bootstrap_dropdowns_enhancement @Html.MvcSiteM
我现在很喜欢通过 Nuget 使用制作精良的 MVCSiteMapProvider,但我遇到了障碍。 我正在尝试修改 @Html.MvcSiteMap().Menu() 助手的模板。我正在修改的文件是
您好,我已经在我的网络配置中添加了提供商,如下所示: 我在一个单独的类文件
tl;博士: 来自 MvcSiteMapProvider 的菜单有时无法在应用程序重新联机后呈现自身,即使代码运行并且在页面刷新后呈现菜单也是如此。 我在 ASP.NET MVC 3 项目中使用 Mv
我是一名优秀的程序员,十分优秀!