搜索互联网I found a similar problem,但我的搜索只发生在项目其他区域的节点上。
错误
无法解析站点地图节点CartadeInterveniência的URL 表示控制器processo中的action carta_interveniencia。确保 可以解析此站点地图节点的路由及其路径 默认值允许解析当前站点地图节点的URL。
网页
<mvcSiteMapNode title="Cadastros" clickable="false" roles="*" >
<mvcSiteMapNode title="Processos" controller="processos" action="index">
<mvcSiteMapNode title="Novo" action="novo" />
<mvcSiteMapNode title="Editar" action="editar" dynamicNodeProvider="CreditoImobiliarioBB.Web.Infra.Sitemap.ProcessosDynamicNodeProvider, CreditoImobiliarioBB.Web" />
<mvcSiteMapNode title="Detalhes" action="detalhes" preservedRouteParameters="id" dynamicNodeProvider="CreditoImobiliarioBB.Web.Infra.Sitemap.ProcessosDynamicNodeProvider, CreditoImobiliarioBB.Web">
<mvcSiteMapNode title="Documentos" key="ProcessoDocumentos2" clickable="false" area="Documentos" controller="processo">
<mvcSiteMapNode title="Carta de Interveniência" preservedRouteParameters="id" action="carta_interveniencia"></mvcSiteMapNode>
</mvcSiteMapNode>
</mvcSiteMapNode>
</mvcSiteMapNode>
区域注册
public class DocumentosAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "Documentos";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
name: "Documentos",
url: "{controller}/{id}/documento/{action}",
defaults: null,
constraints: new { id = @"^\d+$" },
namespaces: new string[] { "CreditoImobiliarioBB.Web.Areas.Documentos" }
);
}
}
答案 0 :(得分:2)
解析器的默认实现以这种方式运行。它会尝试根据您的站点地图中的确切位置找到路线。由于您的站点地图没有id参数,并且您对此有约束,因此找不到路由,并且解析程序抛出异常。但是,解析器在加载站点地图时必须解析每个URL是没有理由的。
您可以创建自己的解析程序并将其注册到站点地图。将默认值复制并粘贴到您自己的类中。在默认代码的底部附近是:
if (string.IsNullOrEmpty(returnValue))
{
throw new UrlResolverException(string.Format(Messages.CouldNotResolve, mvcSiteMapNode.Title, action, controller, mvcSiteMapNode.Route ?? ""));
}
_urlkey = key;
_url = returnValue;
return returnValue;
将该代码更改为:
if (string.IsNullOrEmpty(returnValue))
{
return Guid.NewGuid().ToString();
}
_urlkey = key;
_url = returnValue;
return returnValue;