我在 .NET 5 中有一个 Blazor Server 项目,它在特定页面中给了我一些非常奇怪的行为。
我有一个名为的页面Products
,其中包含一个名为的自定义组件ProductSettings
,该组件需要两个列表 - aList<Location>
和 a List<Product>
。该页面继承自BasePage
执行一些初步查找(业务信息等)的 a。Products
页面如下所示:
<ProductSettings Products="@products" Locations="@locations"></ProductSettings>
我OnParametersSet
对页面和组件都使用了这些方法。页面方法如下所示:
protected List<Product> products { get; set; }
protected List<string> locations { get; set; }
protected override void OnParametersSet()
{
log.LogTrace("Products.ParametersSet start");
products = new List<Product>();
locations = locationRepo.GetLocationsByBusiness(business!.BusinessId).Select(x => x.Handle).ToList();
var l1 = productsRepo.GetProducts(locations[0], business!.BusinessId);
log.LogTrace(@"{Loc0} location ids:",locations[0]);
foreach (var l in l1)
{
log.LogTrace(l.LocationId);
}
var l2 = productsRepo.GetProducts(locations[1], business!.BusinessId);
log.LogTrace(@"{Loc0} location ids:",locations[1]);
foreach (var l in l2)
{
log.LogTrace(l.LocationId);
}
products.AddRange(l1);
products.AddRange(l2);
log.LogTrace("main array location ids:");
foreach (var p in products)
{
log.LogTrace(p.LocationId);
}
log.LogTrace("Products page params set");
base.OnParametersSet();
}
locationRepo.GetLocationsByBusiness
和方法是同步的productsRepo.GetProducts
,可以从 Azure 表存储中提取数据。
我得到的错误是,尽管我的循环通过并成功Product
获取了每个位置的数据Location
(我有 2 个位置,每个位置都有 4 个产品),但我最终得到了一个包含 8 个产品的列表,这些产品都与第二组产品匹配。换句话说,在上面的代码中,我得到了这个跟踪输出:
09:38:28 trce: AdminSite.Components.BasePage[0] business-1 location ids:
09:38:28 trce: AdminSite.Components.BasePage[0] business-1
09:38:28 trce: AdminSite.Components.BasePage[0] business-1
09:38:28 trce: AdminSite.Components.BasePage[0] business-1
09:38:28 trce: AdminSite.Components.BasePage[0] business-1
09:38:28 trce: AdminSite.Components.BasePage[0] business-2 location ids:
09:38:28 trce: AdminSite.Components.BasePage[0] business-2
09:38:28 trce: AdminSite.Components.BasePage[0] business-2
09:38:28 trce: AdminSite.Components.BasePage[0] business-2
09:38:28 trce: AdminSite.Components.BasePage[0] business-2
09:38:28 trce: AdminSite.Components.BasePage[0] main array location ids:
09:38:28 trce: AdminSite.Components.BasePage[0] business-2
09:38:28 trce: AdminSite.Components.BasePage[0] business-2
09:38:28 trce: AdminSite.Components.BasePage[0] business-2
09:38:28 trce: AdminSite.Components.BasePage[0] business-2
09:38:28 trce: AdminSite.Components.BasePage[0] business-2
09:38:28 trce: AdminSite.Components.BasePage[0] business-2
09:38:28 trce: AdminSite.Components.BasePage[0] business-2
09:38:28 trce: AdminSite.Components.BasePage[0] business-2
对于我的生活,我无法理解它为什么会这样做。它似乎完全覆盖了列表中的前四个记录。我有其他页面使用类似的方法,我没有遇到任何这样的问题。最初我认为它与我的回购或诸如此类的其他逻辑有关,我已经探索了文档,List<T>
但我找不到任何说对象会像这样合并的东西。我也有单元测试来验证和完整性检查AddRange
以及我的其他逻辑,并且我的库中的所有内容都是一致的 - 只有在这个 Blazor 页面中,我才得到这种奇怪。