【问题标题】:Blazor pages with same variable on different pages causes ambiguous routes (upon rebuild)在不同页面上具有相同变量的 Blazor 页面会导致路由不明确(重建时)
【发布时间】:2021-06-27 01:01:58
【问题描述】:

编辑:出于某种原因,每当我重建应用程序时,我对 BO.razor 所做的所有更改都已消失。我通过从 BOType.razor 另存为创建了 BO.razor,但我尝试关闭 BO.razor 并重新打开它,我的更改被保留。这些变化是第一次出现。重建和 BO.razor 将 BOType.razor 的内容复制到其中。

这显然解释了为什么路线会发生冲突,但会引发更进一步、更令人不安的问题。

WTF.


我正在尝试构建我的第一个 Blazor 应用程序。到目前为止的基本思想是,您可以拥有不同的业务对象,并根据业务对象类型动态生成页面。

到目前为止,我正在尝试构建两个页面

/{BOType}/ - 列出此类型的所有有效 BO

/{BOType}/{BOID:int}/ - 显示此 BO 及其相关数据。

当我第一次运行该应用程序时,它完全按照我的想象运行。 /Form/ 显示所有已保存的表单,/Form/1 显示包含 Form 1 数据的页面。

当我重建应用程序或在使用 watch 运行应用程序时保存某些内容时,我收到以下异常:

InvalidOperationException: The following routes are ambiguous:
'{BOTName}' in 'BlazorApp.Pages.BOType'
'{BOTName}' in 'BlazorApp.Pages.BO'
Microsoft.AspNetCore.Components.LegacyRouteMatching.LegacyRouteTableFactory.RouteComparison(LegacyRouteEntry x, LegacyRouteEntry y)

InvalidOperationException: Failed to compare two elements in the array.
System.Collections.Generic.ArraySortHelper<T>.Sort(Span<T> keys, Comparison<T> comparer)

如果我更改变量的名称(一个名为 BOTName,一个名为 BOType)或更改顺序(/BOType/ 和 /view/BOType/BOID,或 /BOType/ 和 /BOType /view/BOID)。

令人恼火的部分是,每当我尝试其中一项更改时,它似乎都可以工作,因为出于某种原因,它第一次解释这些路径时就明白了我的意思。然后我更改其他内容并保存或只是重建,我得到了不明确的路线异常。

是否有人对我如何以某种方式坚持我的原始工作路线有任何想法,或者对编译器以这种方式解释它的一些提示?我是 Web 应用程序开发的新手,所以我还在学习,Blazor 的实现看起来很简单,但显然不可靠:(

谢谢

【问题讨论】:

    标签: c# routes blazor url-routing blazor-server-side


    【解决方案1】:

    问题在于 Blazor 依赖于编译器扩展,IDE 不知道(实际上它知道,但不完美)。以机械方式处理 razor 文件(复制或移动)或重建项目可能会破坏 Blazor 的缓存。

    有时缓存不是持久的,因此重新启动 Visual Studio(或您使用的任何 IDE)可能就足够了。在其他情况下,您必须按如下方式重置中间文件:

    1. 退出 IDE。
    2. 打开项目目录,删除输出目录(binobj)。
    3. 重新打开并重建项目。

    如果它没有帮助,并避免将来出现同样的问题:

    • 永远不要像处理普通文件那样处理razor文件,所以不要复制也不要移动,
    • 如果您想复制razor 页面/组件,请创建一个新的并复制代码。移动就像复制,但旧文件被删除。
      • 注意为复制的类型指定不同的名称。
    • 重命名很痛苦。只需在正常重命名后进行重置(如前所述)即可。

    【讨论】:

    • 为此,我使用 Visual Studio 2019,并在 VS 外部的 FileExplorer 中进行所有复制和重命名。然后 VS 会在不重新启动的情况下获取更改并修复问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 2020-02-20
    • 2019-04-08
    • 2022-01-01
    • 2019-01-16
    • 1970-01-01
    相关资源
    最近更新 更多