【问题标题】:Nodes with Empty (Default) Action具有空(默认)操作的节点
【发布时间】:2015-02-05 20:41:05
【问题描述】:

MvcSiteMapProvider v4 从 v3 升级。

我有一条类似的路线

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

然后我将添加“Name”和“Id”作为 RouteValues。

当我跑步时,我会得到:

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

这在 v3 中有效。

发生了什么变化?

【问题讨论】:

    标签: mvcsitemapprovider


    【解决方案1】:

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

    • 基于路由的节点
    • 基于 URL 的节点
    • 不可点击的分组节点
    • 动态节点提供者定义节点

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

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

    因此,简而言之,您收到此错误是因为您的操作属性为 null 或空字符串。要使其与您的路线匹配,您需要将您的操作明确设置为“索引”。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-11
      • 1970-01-01
      • 1970-01-01
      • 2020-11-09
      • 2023-01-12
      • 2022-06-21
      • 2018-08-28
      • 1970-01-01
      相关资源
      最近更新 更多