【问题标题】:Blazor Get Null Value ExceptionBlazor 获取空值异常
【发布时间】:2021-05-04 06:45:40
【问题描述】:

我已经从 webapi 获取数据。但它仍然显示空值异常。它应该在渲染之前获取数据。也有检查 null 的语句。它通过了但仍然错误

我已经从 webapi 获取数据。但它仍然显示空值异常。它应该在渲染之前获取数据。也有检查 null 的语句。它通过了但仍然错误

Razor 组件代码

    @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();
    }
}

这是我在访问路由 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()

【问题讨论】:

  • 您的RoleClaims 似乎是null。由于您无法在 null 上执行迭代,因此您看到的是 object reference error。为什么不放置一个断点,看看permissionDto.RoleClaims 是否有任何值可以迭代?
  • 我不明白为什么。但我只是添加了这个检查行@if (permissionDto.RoleClaims != null) 然后它就可以工作了

标签: null blazor blazor-webassembly


【解决方案1】:

可能您的roleClaimsDto 为空,因此像roleClaimsDto.Type 一样访问它会导致空引用异常。

如果您希望枚举中可能有空对象,您可以使用迭代它

@foreach (RoleClaimsDto roleClaimsDto in permissionDto.RoleClaims.Where(x =&gt; x != null))

【讨论】:

  • 我不明白为什么。但我只是添加此检查行 @if (permissionDto.RoleClaims != null) 然后它就可以工作了
  • 是的,您提到的添加@if (permissionDto.RoleClaims != null) 与我建议的过滤空项目相同。虽然那样你会得到一个额外的嵌套 if 语句。或者你也可以@if (permissionDto.RoleClaims == null) { continue }
猜你喜欢
  • 2023-02-01
  • 1970-01-01
  • 2014-05-09
  • 2020-07-16
  • 2014-12-17
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多