Null Blazor获取空值异常
我已经从webapi获得了数据。但它仍然显示空值异常。它应该在渲染之前获取数据。还有一个语句已经检查空了。它通过了,但仍然是错误的 我已经从webapi获得了数据。但它仍然显示空值异常。它应该在渲染之前获取数据。还有一个语句已经检查空了。它通过了,但仍然是错误的 剃须刀组件代码Null Blazor获取空值异常,null,blazor,blazor-webassembly,Null,Blazor,Blazor Webassembly,我已经从webapi获得了数据。但它仍然显示空值异常。它应该在渲染之前获取数据。还有一个语句已经检查空了。它通过了,但仍然是错误的 我已经从webapi获得了数据。但它仍然显示空值异常。它应该在渲染之前获取数据。还有一个语句已经检查空了。它通过了,但仍然是错误的 剃须刀组件代码 @page "/rolepermission/{roleId}" @inject HttpClient client @inject IJSRuntime js <h3>Role
@page "/rolepermission/{roleId}"
@inject HttpClient client
@inject IJSRuntime js
<h3>Roles</h3>
<small>Add as many role as you wish.</small>
<br />
<div class="card">
<div id="viewAll" class="card-body table-responsive">
<input asp-for="@permissionDto.RoleId" type="hidden" />
<table class="table table-striped" id="permissionTable">
<thead>
<tr>
<th>
Type
</th>
<th>
Permission
</th>
<th>
Status
</th>
</tr>
</thead>
<tbody>
@if (permissionDto != null)
{
@foreach (RoleClaimsDto roleClaimsDto in permissionDto.RoleClaims)
{
<tr>
<td>
<input @bind="roleClaimsDto.Type" type="hidden" />
@roleClaimsDto.Type
</td>
<td>
<input @bind="@roleClaimsDto.Value" type="hidden" />
@roleClaimsDto.Value
</td>
<td>
<div class="form-check m-1">
<input @bind="roleClaimsDto.Selected" class="form-check-input" />
</div>
</td>
</tr>
}
}
</tbody>
</table>
<div class="col-sm-12" style="padding: 20px 20px 0px 0px">
<button type="submit" id="save" class="btn btn-success">
<i class="fa fa-check"></i>
Save
</button>
</div>
</div>
</div>
@code {
[Parameter]
public string roleId { get; set; }
PermissionDto permissionDto = new PermissionDto();
protected override async Task OnInitializedAsync()
{
permissionDto = await client.GetFromJsonAsync<PermissionDto>("api/permission/allPermission/" + roleId);
}
async Task AddNewRole()
{
// await client.PostAsJsonAsync("api/roles", roleRequest);
await OnInitializedAsync();
}
}
@page”/rolepermission/{roleId}
@注入HttpClient客户端
@注入IJSRuntime js
角色
添加任意多的角色。
类型
许可
地位
@if(permissionDto!=null)
{
@foreach(RoleClaims至RoleClaims至许可的RoleClaims至RoleClaims)
{
@roleclaimsdo.Type
@roleclaimsdo.Value
}
}
拯救
@代码{
[参数]
公共字符串roleId{get;set;}
PermissionDto PermissionDto=新的PermissionDto();
受保护的重写异步任务OnInitializedAsync()
{
permissionDto=wait client.GetFromJsonAsync(“api/permission/allPermission/”+roleId);
}
异步任务AddNewRole()
{
//等待client.postsjsonasync(“api/角色”,roleRequest);
等待OnInitializedAsync();
}
}
这是访问路由url时产生的异常
blazor.webassembly.js:1 crit: Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100]
Unhandled exception rendering component: Object reference not set to an instance of an object.
System.NullReferenceException: Object reference not set to an instance of an object.
at PermissionBlazorApp.Client.Pages.User.RolePermissions.BuildRenderTree(RenderTreeBuilder __builder) in C:\Users\Chhin Sras\source\repos\PermissionBlazorApp\PermissionBlazorApp\Client\Pages\User\RolePermissions.razor:line 28
at Microsoft.AspNetCore.Components.ComponentBase.<.ctor>b__6_0(RenderTreeBuilder builder)
at Microsoft.AspNetCore.Components.Rendering.ComponentState.RenderIntoBatch(RenderBatchBuilder batchBuilder, RenderFragment renderFragment)
at Microsoft.AspNetCore.Components.RenderTree.Renderer.RenderInExistingBatch(RenderQueueEntry renderQueueEntry)
at Microsoft.AspNetCore.Components.RenderTree.Renderer.ProcessRenderQueue()
blazor.webassembly.js:1 crit:Microsoft.AspNetCore.Components.webassembly.Rendering.WebAssemblyRenderer[100]
未处理的异常呈现组件:对象引用未设置为对象的实例。
System.NullReferenceException:对象引用未设置为对象的实例。
在C:\Users\Chhin Sras\source\repos\PermissionBlazorApp\PermissionBlazorApp\Client.Pages.User.RolePermissions.BuildRenderTree(RenderTreeBuilder\uu builder)中的PermissionBlazorApp.Client.Pages.User.RolePermissions.BuildRenderTree(RenderTreeBuilder\uu builder):第28行
在Microsoft.AspNetCore.Components.ComponentBase.b_u6_0(RenderTreeBuilder)上
在Microsoft.AspNetCore.Components.Rendering.ComponentState.RenderIntoBatch(RenderBatchBuilder、RenderFragment和RenderFragment)中
位于Microsoft.AspNetCore.Components.RenderTree.Renderer.RenderInExistingBatch(RenderQueueEntry RenderQueueEntry)
在Microsoft.AspNetCore.Components.RenderTree.Renderer.ProcessRenderQueue()中
您的roleclaimsdo
可能为空,因此像roleclaimsdo.Type
一样访问它会导致空引用异常
如果您希望在您的可枚举文件中有空对象,那么可以使用
@foreach(RoleClaimsDto roleclaimsdo in permissionDto.RoleClaims.Where(x=>x!=null))
您的RoleClaims
似乎是null
。由于您不能在null
上执行迭代,因此您会看到对象引用错误
。为什么不放置一个断点,看看permissionDto.RoleClaims
是否有任何值可以迭代?我不明白为什么。但是我只是添加了这个检查行@if(permissionDto.RoleClaims!=null),然后它就工作了。我不明白为什么。但是我只是添加了这个检查行@if(permissionDto.RoleClaims!=null),然后它就可以工作了是的,添加@if(permissionDto.RoleClaims!=null)
就像你提到的那样,对空项进行我建议的过滤。不过,您会得到一个额外的嵌套if语句。或者,您也可以执行@if(permissionDto.RoleClaims==null){continue}