Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC路由和站点地图未生成正确的面包屑路径_C#_Asp.net Mvc_Url Routing_Asp.net Mvc Routing_Mvcsitemapprovider - Fatal编程技术网

C# MVC路由和站点地图未生成正确的面包屑路径

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

我正在使用MVC.SiteMap,取得了一些成功。唯一的问题是当我有一个3步路径(或更多)时。让我分享一些代码来澄清我的问题:

经过一些清理,这是我的路线表:

        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 }
);