我将 Blazorize 与带有 .NET 5 的 Blazor Server(所有最新版本)一起使用。
我的问题是,拥有一个无线电组并在选项中移动时,我在特定选项上得到 NullReferenceException 并且应用程序崩溃。
Chrome Dev Tools 的确切错误是
blazor.server.js:19 [2021-04-05T01:59:44.250Z] 错误:System.NullReferenceException:对象引用未设置为对象的实例。在 Blazorise.DataGrid.DataGrid
1.FilterData(IQueryable
1 查询)在 Blazorise.DataGrid.DataGrid1.FilterData() at Blazorise.DataGrid.DataGrid
1.FilterViewData() 在 Blazorise.DataGrid.DataGrid`1.b__436_5(RenderTreeBuilder __builder4) 在 Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder.AddContent(Int32 序列, RenderFragment 片段)在 Blazorise.TableBody.BuildRenderTree(RenderTreeBuilder __builder) 在 Microsoft.AspNetCore.Components.Rendering.ComponentState.RenderIntoBatch(RenderBatchBuilder batchBuilder, RenderFragment renderFragment) 在 Microsoft.AspNetCore.Components.RenderTree.Renderer.RenderInExistingBatch(RenderQueueEntry renderQueueEntry) 在 Microsoft .AspNetCore.Components.RenderTree.Renderer.ProcessRenderQueue()
在我最内部的组件代码中,我有这样的东西
<DataGrid TItem="InnerElement" EditMode="DataGridEditMode.Popup" RowUpdated="(update) => OnRowUpdated()" Data="element.Elements" Editable="true" ShowPager="true">
<DataGridColumn TItem="InnerElement" Editable="true" Caption="@Localizer.Text("name")" Field="@nameof(InnerElement.Alias2)"></DataGridColumn>
@if (element.IsRanged)
{
<DataGridColumn TItem="InnerElement" Editable="true" Caption="@Localizer.Text("min_value")" Field="@nameof(InnerElement.MinValue)" />
<DataGridColumn TItem="InnerElement" Editable="true" Caption="@Localizer.Text("max_value")" Field="@nameof(InnerElement.MaxValue)" />
}
else
{
@if (element.Elements[0].Value != null)
{
<DataGridColumn TItem="InnerElement" Caption="@Localizer.Text("value")" Field="@nameof(InnerElement.Value)" Editable="false" />
}
}
上面提取代码的组件容器有这个
<RadioGroup Inline="true" TValue="ElementContext" CheckedValue="PatternContext" CheckedValueChanged="ChangeContext">
<Radio Value="ElementContext.DEFAULT" TValue="ElementContext">@Localizer.Text("elementcontext_default")</Radio>
<Radio Value="ElementContext.CATEGORY" TValue="ElementContext">@Localizer.Text("elementcontext_category")</Radio>
<Radio Value="ElementContext.RANGE" TValue="ElementContext">@Localizer.Text("elementcontext_range")</Radio>
</RadioGroup>
和更改上下文
private void ChangeContext(ElementContext context)
{
if (context == ElementContext.DEFAULT)
{
Elements[0].Elements = new List<InnerElement>() {
new InnerElement()
{
Alias = "Default",
Alias2 = "",
Abstract = Default
}
};
}
else
{
Elements[0].Name = string.Empty;
Elements[0].IsContinuous = context == ElementContext.VALUE;
Elements[0].IsRanged = context == ElementContext.RANGE;
Elements[0].Elements = new List<InnerElement>();
}
PatternContext = context;
StateHasChanged();
}
在组件的第一个摘录中包含 if 语句是否有问题?任何想法?