MvcSiteMapProvider节点URL呈现为/#

时间:2017-02-21 12:35:15

标签: mvcsitemapprovider

正如标题所述,面包屑中某个节点的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-->

1 个答案:

答案 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