正如标题所述,面包屑中某个节点的URL不正确。我刚收到http://localhost/#
显然我有些不对劲。 我在站点地图中有其他类似的结构正在运行。你能从这里看出什么错过吗?
如果需要,我可以发布更多信息。
SiteMap:
<mvcSiteMapNode title="ISP" controller="xxx" action="Index">
<mvcSiteMapNode title="PC" action="Details" preservedRouteParameters="pcId">
<mvcSiteMapNode title="SGD" controller="yyy" action="Details" preservedRouteParameters="pcId, yyyId, editable">
<mvcSiteMapNode title="ESGN" controller="yyy" action="Title" preservedRouteParameters="pcId, yyyId, editable" />
</mvcSiteMapNode>
操作:
[HttpGet]
[Route("xxx/{pcId:int}/yyy/{yyyId:int}/Details/{editable:bool}")]
public virtual ActionResult Details(int pcId, int yyyId, bool editable)
{
[HttpGet]
[Route("xxx/{pcId:int}/yyy/{yyyId:int}/Title")]
public virtual ActionResult Title(int pcId, int yyyId)
{
路线图:
routes.MapRoute(
name: "xxx",
url: "xxx/{action}/{pcId}",
defaults: new
{
controller = "xxx",
action = "Index",
pcId = UrlParameter.Optional
}
);
更新:删除“可编辑”参数时,它开始起作用。 可能存在超过2个参数的问题吗?或者可能是参数的类型或名称?
更新以下来自NightOwl88的调试建议:
urlHelper会生成正确的网址
这是我的控制器代码:
[HttpGet]
[Route("TransactionDetails/File/{fileId:int}")]
public virtual ActionResult Index(int fileId)
{
{
var urlHelper = new UrlHelper(new System.Web.Routing.RequestContext(this.HttpContext, this.RouteData));
var url = urlHelper.Action("Index", "Transaction",
new System.Web.Routing.RouteValueDictionary { { "id", 678 } });
System.Diagnostics.Debug.WriteLine(url);
}
{
var urlHelper = new UrlHelper(new System.Web.Routing.RequestContext(this.HttpContext, this.RouteData));
var url = urlHelper.Action("Index", "File",
new System.Web.Routing.RouteValueDictionary {{"fileId", 123}});
System.Diagnostics.Debug.WriteLine(url);
}
我得到: / AdministratorConsole / TransactionDetails / 678 和 / AdministratorConsole / TransactionDetails /文件/ 123
所以助手能够为我生成一个网址,但是MvcSiteMapProvider仍然不满意。
SiteMap是:
<mvcSiteMapNode title="Transaction Log" controller="TransactionLog" action="Index">
<mvcSiteMapNode title="Transaction Details" controller="Transaction" action="Index" preservedRouteParameters="id">
<mvcSiteMapNode title="File Details" controller="File" action="Index" preservedRouteParameters="id, fileId"> <!--TODO link back to parent not working-->
答案 0 :(得分:0)
try
{
loadData1(id1);
}
catch(Exception e)
{
loadData2(id2);
}
表示无法根据提供的信息(当前请求与节点配置中的内容之间)解析URL。有关说明,请参阅Why does Default UrlResolver throw an exception。
#
通过MVC MvcSiteMapProvider
课程解析网址,因此如果您遇到问题,则应use the UrlHelper
explicitly进行问题排查。如果您将以下代码放入控制器并对其进行编辑以匹配生成UrlHelper
的请求,则您将能够确定如何正确解析URL。但是,与#
不同,如果无法解析网址,MvcSiteMapProvider
将返回UrlHelper
。最可能的原因是您错过了路线设置为 required 的路线值。
null