我不知道为什么这个列表渲染不再起作用,并抛出一个奇怪的异常:
Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer [100] 未处理的异常呈现组件:可为空的对象必须具有一个值。 System.InvalidOperationException:可为空的对象必须具有一个值。 在System.Nullable`1 [T] .get_Value()<0x28f3be8 + 0x0000a>中:: 0 在C:\ Users \ vOId \ Desktop \ projects \ collAnon \ collAnon.Pub \ Client \ Components \ Threads中的collAnon.Pub.Client.Components.Threads.BuildRenderTree(Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder __builder)[0x010c7]剃刀:106 在Microsoft.AspNetCore.Components.ComponentBase。<。ctor> b__6_0(Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder构建器)<0x2d39550 + 0x0001a>在:0中 在Microsoft.AspNetCore.Components.Rendering.ComponentState.RenderIntoBatch(Microsoft.AspNetCore.Components.Rendering.RenderBatchBuilder batchBuilder,Microsoft.AspNetCore.Components.RenderFragment renderFragment)<0x2d38ea8 + 0x00062>在:0中 在Microsoft.AspNetCore.Components.RenderTree.Renderer.RenderInExistingBatch(Microsoft.AspNetCore.Components.Rendering.RenderQueueEntry renderQueueEntry)<0x2d388a8 + 0x0004c>在:0中 在Microsoft.AspNetCore.Components.RenderTree.Renderer.ProcessRenderQueue()<0x2d35ce8 + 0x00098>的:0
通常会初始化列表,从服务器获取数据并将其添加到列表以进行渲染(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>
}
//...
这部分代码没有改变,只是列表的呈现突然抛出该异常而元素不再呈现。
可能是什么? 有人有类似的问题吗?
答案 0 :(得分:1)
初始化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>
}
}
答案 1 :(得分:1)
可空对象必须有一个值。
您在此处发布的代码不会产生该错误。正如您自己说的那样,“这部分代码没有改变”
在某种程度上,您已将其替换为...
。寻找可为空的属性。
“突然出现该列表的呈现”很可能是由数据引起的。某些专栏在您没想到的地方出现了空值。