为什么 Blazor WebAssembly @foreach{} 无法呈现列表?



我不明白为什么这个列表渲染不起作用,不再抛出一个奇怪的异常:

Microsoft.AspNetCore.Components.WebAssembly.Frendering.WebAssemblyRenderer[100]未处理的异常呈现组件:可为null的对象必须有一个值。System.InvalidOperationException:可为null的对象必须有一个值。在System.Nullable `1[T].get_Value((<0x28f3be8+0x0000a>在:0位于C:\Users\vOId\Desktop\projects<编辑>lt;编辑>\Client\Components\Threads.剃刀:106位于Microsoft.AspNetCore.Components.ComponentBase.<。ctor>b__6_0(Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder生成器(<0x2d39550+0x001a>在:0位于Microsoft.AspNetCore.Components.Rendering.ComponentState.RenderIntoBatch(Microsoft.AspNetCore.Components.Rendering.RenderBatchBuilder batchBuilder、Microsoft.AspNet Core.Components RenderFragment RenderFragment(<0x2d38ea8+0x00062>在:0位于Microsoft.AspNetCore.Components.RenderTree.Render.RenderInExistingBatch(Microsoft.AspNetCore.Components.Rendering.RenderQueueEntry RenderQueueEntry(<0x2d388a8+0x0004c>在:0位于Microsoft.AspNetCore.Components.RenderTree.Render.ProcessRenderQueue((<0x2d35ce8+0x00098>in:0

列表的初始化是常见的,从服务器获得数据e将其添加到列表中进行渲染(ViewThreads(:

protected async override Task OnInitializedAsync()
{
var result = await ThreadService.GetThreads();
if (result.IsValid)
ViewThreads.AddRange((List<ViewThread>)result.Data);
//...
}

同时,在@foreach的第一条指令的渲染点,异常的第106行,这是渲染

//...
@foreach (var thread in ViewThreads)
{
<p class="button is-light is-rounded neoFile petite-caps mb-3 @(CurrentThread != null && CurrentThread.Id == thread.Id ? "isSelected" : null)"
@onclick="() => SelectThread(thread)" @key="thread">
@thread.Title
</p>
}
//...

这部分代码没有改变,只是列表的呈现突然抛出了异常,元素不再呈现。

它可能是什么?有人有类似的问题吗?

初始化ViewThreads对象:

public List<ViewThread> ViewThreads { get; set; } = new List<ViewThread>();

或者将foreach包裹在if (ViewThreads != null):上

if (ViewThreads != null)
{
@foreach (var thread in ViewThreads)
{
<p class="button is-light is-rounded neoFile petite-caps mb-3 @(CurrentThread != null && CurrentThread.Id == thread.Id ? "isSelected" : null)"
@onclick="() => SelectThread(thread)" @key="thread">
@thread.Title
</p>
}
}

可为null的对象必须有一个值。

您在此处发布的代码不会产生该错误。正如你自己所说;这部分代码没有改变";

所以它在某些方面被...取代了。查找可为null的属性。

并且";该列表的呈现突然抛出";很可能是由数据引起的。一些专栏在你没想到的地方偷偷带了一个null。

相关内容

  • 没有找到相关文章

最新更新