c# - Blazor Server托管,null引用异常

标签 c# .net blazor blazor-server-side .net-6.0

我正在我们的一个项目上测试 blazor 服务器 (.net 6.05),我有以下代码:

@page "/"
@using Microsoft.EntityFrameworkCore

@using Microsoft.JSInterop
@inject IDbContextFactory<MyDbContext> DbContextFactory;


@code {
    [Inject]
    private IHttpContextAccessor HttpContextAccessor { get; set; } = default!;

    MyDbContextContext { get; set; }
    public Dish? RandomDish { get; set; }
    public Region? Region { get; set; }


    async Task getRandomDish()
    {
        var dish = await Context.Dishes.OrderBy(m => Guid.NewGuid()).FirstOrDefaultAsync();
        RandomDish = dish;
    }

    async Task SaveDishName()
    {
        await Context.SaveChangesAsync();
    }

    protected override async Task OnInitializedAsync()
    {

        var a = HttpContextAccessor.HttpContext.User.Identity;
        Context = await DbContextFactory.CreateDbContextAsync();
        Region = await Context.Regions.SingleOrDefaultAsync(m => m.Name == "Italy");
        await getRandomDish();

    }
     protected override async Task OnAfterRenderAsync(bool firstRender)
    {
        if (!firstRender) return;

    }
}

<PageTitle>Index</PageTitle>

@if (RandomDish != null)
{
    <h1>@RandomDish?.Name</h1>
    <h2>@RandomDish?.DishId</h2>
    <p>@Region?.Borders?.AsText()</p>
}<-- it errors here
<button @onclick="@(async () => await getRandomDish())">GET NEW DISH</button>

<div>
    Change dish name
    <input @bind="RandomDish.Name" />
    <button @onclick="@(async () => await SaveDishName())">Save</button>
</div>

当我运行代码时,它抛出以下异常

System.NullReferenceException: 'Object reference not set to an instance of an object.'

****.Cms.Web.Pages.Index.RandomDish.get returned null.

我也尝试过“is not null”和referenceEquals(RandomDish, null),但总是同样的问题。

如果 getter 会抛出空值,我应该如何进行空值检查:/

如果我用下面的行初始化盘子,问题就会消失,但这并不是我猜想的问题的解决方案。

public Dish? RandomDish { get; set; } = new Dish();

enter image description here

最佳答案

@bind 中不能有 null。

<input @bind="RandomDish.Name" />

使用 @if (RandomDish != null) 或类似内容包围 Save block 。

关于c# - Blazor Server托管,null引用异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72576886/

相关文章:

c# - 与 3 个子组件共享状态并处理事件 |通量器

asp.net-core - 从 JS 到 .Net 的 InvokeUnmarshalled 相当于什么?

c# - 引用 Razor 类库时重复的基本路径

javascript - 对于企业应用程序,输入验证应该是客户端还是服务器端?

c# - 内存不足时释放的动态变量?

c# - 在 While 循环的每次迭代期间读取 SQL Server Stored Proc 输出的表

c# - System.Security.CodeAccessPermission 在 .NET Core 3.1/.NET 5.0 中是否已过时?

c# - WPF:在 UI 线程和后台线程之间传递对象

c# - XAML 中的按钮不可单击

c# - 无法将 List<Moq.Mock<System.Web.HttpPostedFileBase>> 转换为 List<System.Web.HttpPostedFileBase>