gpt4 book ai didi

c# - mvcsitemapprovider - 从不同的页面导航到相同的 ActionResult

转载 作者:太空宇宙 更新时间:2023-11-03 12:43:25 24 4
gpt4 key购买 nike

Mvc 5、.Net 4.5

我按如下方式实现 MvcSiteMapNodeAttribute:

[MvcSiteMapNode(Title="Running Events", ParentKey="Events", Key="RunningEvents")]
public ActionResult RunningEvents()
{
return View();
}

我需要从多个位置访问此页面并保持面包屑导航(即从正确的调用方法)。然而,ParentKey 指示调用的来源,因此根据它设置 ParentNode。这并不理想,因为我希望调用 ActionResult 成为父级而不是像 ParentKey 解决方案那样“硬编码”。 ParentKey 在运行时也不可编辑,ParentNode 也不可编辑。目前解决这个问题的唯一方法是用不同的签名复制 ActionResult 并给它相同的标题,这也不理想。

我已经阅读了有关 mvc 路由、DynamicNodeProvider、路由映射等的内容,但找不到实现此功能的方法?我对 mvc 也不是很熟悉,所以希望得到一些指导。

谢谢

最佳答案

参见 Multiple Navigation Paths to a Single Page文档。

您可以在多个地方使用相同的 Controller 操作。但是,您必须始终提供一组唯一的路由值(这通常意味着每个 URL 都应该是唯一的)。

最自然的方法是使用父类别设计您的 URL。

routes.MapRoute(
name: "Category1RunningEvents",
url: "Category1/RunningEvents",
defaults: new { controller = "Events", action = "RunningEvents", category="Category1" }
);

routes.MapRoute(
name: "Category2RunningEvents",
url: "Category2/RunningEvents",
defaults: new { controller = "Events", action = "RunningEvents", category="Category2" }
);

routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

然后通过category字段区分路由匹配。您可以在同一操作上使用多个 MvcSiteMapNode 属性,每个属性在 SiteMap 中具有不同的父键。

[MvcSiteMapNode(Title="Category 1 Events", ParentKey="Events", Key="RunningEvents", Attributes = @"{ ""category"": ""Category1"" }")]
[MvcSiteMapNode(Title="Category 2 Events", ParentKey="Category2", Key="Category2RunningEvents", Attributes = @"{ ""category"": ""Category2"" }")]
public ActionResult RunningEvents()
{
return View();
}

当然,这不是配置路由的唯一方法,但它应该理清概念。唯一的限制是您必须为匹配使用一组唯一的路由值,每个路由值对应一个节点。但是,可以有多个节点表示相同的 Controller 操作,每个节点都有不同的父节点。

另见 this answer .

关于c# - mvcsitemapprovider - 从不同的页面导航到相同的 ActionResult,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38144899/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com