【问题标题】:Blazor: The list of component records is not validBlazor:组件记录列表无效
【发布时间】:2020-05-24 06:52:27
【问题描述】:

使用 Blazor dotnet core 3.1 并收到此错误:

The list of component records is not valid

发现了一份关于此问题的错误报告,该报告已于 2019 年 12 月关闭: https://github.com/dotnet/aspnetcore/issues/14966 看不到此错误的任何原因,希望有解决方法(不能在每次页面调用时都出现此错误,这种情况很少发生......)。

有没有人有可能导致这种情况的想法/提示?

谢谢!

【问题讨论】:

  • 我遇到了同样的问题,在我的案例中,它是不可 json 序列化的组件参数。看起来 blazor 中缺少错误报告 - 你应该尝试剥离你的组件的功能,直到你摆脱这个错误。
  • 实际上,现在我想起来了,我在 VS 中禁用了异常,它可能正在吞噬初始化异常。

标签: blazor


【解决方案1】:

我在使用 Blazor Client 时将应用程序从 .NET Core 3.0 升级到 .NET Core 3.1 时遇到了同样的问题。我发现的第一个“修复”是在客户端(网络浏览器)上进行强制刷新。也就是我按Ctrl+F5刷新。

我假设客户端缓存了一些 API 调用,并且由于从 3.0 到 3.1 的某些版本/格式更改,旧的缓存数据不再有效,从而导致错误。

我将联系 Blazor 的工作人员以尝试获取更多信息(我在 Microsoft 与他们一起工作)。


2020 年 6 月 1 日更新

我再次在 Azure App Services 上运行我的应用程序。这次连 Ctrl+F5 都没有用。但是我找到了https://stackoverflow.com/a/59356356/31668,并在那里应用了修复,这似乎解决了我的问题。

我对代码稍作更改,因为在我的情况下,我仅在暂存/生产中使用 Azure SignalR 服务,而不是在开发中。所以我在我的应用的 Startup.cs ConfigureServices 方法中有这段代码:

if (!HostingEnvironment.IsDevelopment())
{
    services.AddSignalR().AddAzureSignalR(options =>
    {
        options.ServerStickyMode = Microsoft.Azure.SignalR.ServerStickyMode.Required;
    });
}

【讨论】:

    【解决方案2】:

    在我的例子中,它是一个我用作级联值的类,但它没有没有参数的构造函数

    public class User 
    {
                
        public User(ClaimsPrincipal principal) 
        {
           ....
        }
           ....
     }
    
     public class User 
     {
        //this fix
        public User(){}
        public User(ClaimsPrincipal principal) 
        {
           ....
        }
           ....
     }
    
    [CascadingParameter]
    private User User { get; set; }
    

    【讨论】:

      【解决方案3】:

      浏览器的自动缓存控制可能会出现此问题。

      假设您有两个包含 Blazor 组件的 MVC 视图:页面 A.cshtml 和 B.cshtml。

      当请求页面 A 时,您会收到一个呈现 Blazor 组件的 html 响应,并且连接已建立。 然后,您导航到页面 B。如果您返回页面 A(例如按下返回按钮),您的浏览器将使用之前生成的缓存响应来获取页面 A。

      这应该会中断客户端和服务器之间的连接,因为组件描述符可能会被更改。 (有时似乎是随机的)。

      要解决此问题,请在您的 _Host.cshtml 添加禁用此缓存行为:

      @{ 
          Context.Response.Headers["Cache-Control"] = "no-store";
      }
      

      这将阻止浏览器缓存并使其请求具有正确组件描述符的新页面。

      参考资料: https://www.gitmemory.com/issue/dotnet/aspnetcore/26174/705472525 https://github.com/dotnet/aspnetcore/issues/18143#issuecomment-585961784

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-26
        • 1970-01-01
        • 2018-11-16
        相关资源
        最近更新 更多