具有空(默认)操作的节点

时间:2015-02-05 09:16:48

标签: mvcsitemapprovider

从v3升级MvcSiteMapProvider v4。

我有一条像

这样的路线
routes.MapRoute(
    "SEPageNoAction",
    "{controller}/{name}/{id}", 
    new { controller = "Home", action = "Index", name = UrlParameter.Optional, id = UrlParameter.Optional }, // Parameter defaults
    new { name = @"\D+", id = @"\d+" } // Types
);

我正在使用DynamicNode

在代码中构建节点

我没有设置Action,或者更确切地说,设置Action = null

然后我会添加“姓名”& “Id”为RouteValues。

当我跑步时,我会得到:

  

键'KEY'和标题'TITLE'的节点都有一个空的'action'和空的'url',这是不允许的

这在v3中有效。

改变了什么?

1 个答案:

答案 0 :(得分:1)

在这种情况下,唯一改变的是向SiteMap添加验证,以确保节点属于其中一个有效的节点原型:

  • 基于路由的节点
  • 基于网址的节点
  • 不可点击的分组节点
  • 动态节点提供程序定义节点

添加验证是因为很多人设置了冲突的属性,然后无法弄清楚如何获得有效的配置。因此,现在他们可以看到详细的错误消息,告诉他们错误,以便他们可以解决问题,而不必提出问题。

事后看来,对controller属性而不是action进行检查可能会更好,但当时我认为会出现问题,因为控制器是可选的XML配置(它将从其父节点继承控制器)。

因此,简而言之,您将收到此错误,因为您的action属性为null或空字符串。为了使其与您的路线相匹配,您需要明确将行动设置为"索引"。

也就是说,如果您对此解决方案不满意,可以打开new issue on GitHub或发送带有建议修复的拉取请求。