C# MVC路由和站点地图未生成正确的面包屑路径
我正在使用MVC.SiteMap,取得了一些成功。唯一的问题是当我有一个3步路径(或更多)时。让我分享一些代码来澄清我的问题: 经过一些清理,这是我的路线表:C# MVC路由和站点地图未生成正确的面包屑路径,c#,asp.net-mvc,url-routing,asp.net-mvc-routing,mvcsitemapprovider,C#,Asp.net Mvc,Url Routing,Asp.net Mvc Routing,Mvcsitemapprovider,我正在使用MVC.SiteMap,取得了一些成功。唯一的问题是当我有一个3步路径(或更多)时。让我分享一些代码来澄清我的问题: 经过一些清理,这是我的路线表: routes.MapRouteWithName( name: "RealizacaoPesquisa", url: "RealizacaoPesquisa/{action}/{idPesquisa}/{nrProntuario}/{id}", defa
routes.MapRouteWithName(
name: "RealizacaoPesquisa",
url: "RealizacaoPesquisa/{action}/{idPesquisa}/{nrProntuario}/{id}",
defaults: new { controller = "RealizacaoPesquisa", action = "Index", idPesquisa = UrlParameter.Optional, nrProntuario = UrlParameter.Optional, id = UrlParameter.Optional }
);
routes.MapRouteWithName(
name: "Geral",
url: "{controller}/{action}/{id}/{str}",
defaults: new { controller = "Home", action = "Index" }
);
routes.MapRouteWithName(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
这是我的网站地图XML:
<mvcSiteMapNode title="Realização de Pesquisas" controller="RealizacaoPesquisa" action="Index">
<mvcSiteMapNode title="Participação de Pesquisa" controller="RealizacaoPesquisa" action="Participacao" preservedRouteParameters="idPesquisa">
<mvcSiteMapNode title="Paciente em Pesquisa" controller="RealizacaoPesquisa" action="ParticipacaoPaciente" preservedRouteParameters="idPesquisa;nrProntuario"/>
</mvcSiteMapNode>
</mvcSiteMapNode>
同样,在访问第一步时:http://localhost:61404/RealizacaoPesquisa
一切都很好
进入第二步时:http://localhost:61404/RealizacaoPesquisa/Participacao/27
一切都还可以,
但当我进入第三步:http://localhost:61404/RealizacaoPesquisa/ParticipacaoPaciente/27/0002642811
没有呈现面包屑痕迹
有什么帮助吗?在这种情况下,您认为节点与路由不匹配是正确的 路线
routes.MapRouteWithName(
name: "RealizacaoPesquisa",
url: "RealizacaoPesquisa/{action}/{idPesquisa}/{nrProntuario}/{id}",
defaults: new { controller = "RealizacaoPesquisa", action = "Index", idPesquisa = UrlParameter.Optional, nrProntuario = UrlParameter.Optional, id = UrlParameter.Optional }
);
有5个参数。您在节点中仅占其中的4个。当您没有将标记为urlparmeter.Optional的参数传递给路由时,路由仍将包含值为“
的路由键
因此,为了使其匹配,您需要在参数中指定它
<mvcSiteMapNode title="Paciente em Pesquisa" controller="RealizacaoPesquisa" action="ParticipacaoPaciente" preservedRouteParameters="idPesquisa;nrProntuario;id"/>
好的,我发布了一个我认为是“更好的一个”的尝试,但我已经尝试了很多其他配置。我将编辑我的问题,向您展示另一个完全符合您建议的问题……现在,我能够分离出另一个(非常)奇怪的行为。如果使用参数“id”、“str”(重命名控制器方法上的参数、路由参数和sitemap XML上的参数),我可以让它工作。只需将这3个位置从idPesquisa
和nrProntuario
更改为id
和str
即可。如果将原始名称放回原处,则会出现所述错误。我的mvc.sitemap版本是4.6.15。有什么想法吗?我的建议是查看请求中的RouteData.Values
字典中的实际内容,并与mvcsitemprovider.SiteMaps.Current.findsitempanodefromkey().RouteValues
字典进行比较。您需要通过设置节点的key属性为节点指定一个显式键。要使其匹配,RouteValue的所有键(区分大小写)和值(不区分大小写)必须匹配。此外,还可以查看有关匹配过程的解释。
Key Value
id ""
<mvcSiteMapNode title="Paciente em Pesquisa" controller="RealizacaoPesquisa" action="ParticipacaoPaciente" preservedRouteParameters="idPesquisa;nrProntuario;id"/>
routes.MapRouteWithName(
name: "RealizacaoPesquisa1",
url: "RealizacaoPesquisa/{action}/{idPesquisa}",
defaults: new { controller = "RealizacaoPesquisa", action = "Index", idPesquisa = UrlParameter.Optional }
);
routes.MapRouteWithName(
name: "RealizacaoPesquisa2",
url: "RealizacaoPesquisa/{action}/{idPesquisa}/{nrProntuario}/{id}",
defaults: new { controller = "RealizacaoPesquisa", action = "Index", id = UrlParameter.Optional }
);