我正在我们的一个项目上测试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>

当我运行代码时,它会引发以下异常

系统NullReferenceException:"对象引用未设置为

****.Cms.网状物页.指数随机培养皿.get返回null.

我还try 了"is not null"和referenceEquals(RandomDish,null),但始终是相同的问题.

如果getter将抛出null,我应该如何执行null判断:/

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

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

enter image description here

推荐答案

@bind中不能有空值.

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

@if (RandomDish != null)或类似的数字环绕存储块.

Csharp相关问答推荐

使用GeneratedComInterfaceProperty的.NET 8 COM类对于VB 6/SYS或ALEViewer不可见

使用其可能实现的基类和接口的属性的方法

将修剪声明放入LINQ中

为什么Blazor值在更改后没有立即呈现?

Thad.Sept()vs Task.Delay().Wait()

如何将ASP.NET Core 2.1(在.NET框架上运行)更新到较新的版本?

Unix上的.NET(核心):.NET意外地未看到通过P/Invoke系统调用对环境变量进行的进程内修改

C#使用TextFieldParser读取.csv,但无法使用";0";替换创建的列表空条目

从VS调试器而不是测试资源管理器运行的调试NUnitDotNet测试

如何在Cosmos SDK中控制超时、重试和重试之间的延迟?

如何使用用于VS代码的.NET Maui扩展在我的iOS/Android设备或模拟器上进行调试?

Blazor Server.NET 8中的Blazore.FluentValidation问题

将FileStream的特定部分作为字节数组读取

在使用AWS SDK for.NET时,如何判断S3是否已验证我的对象的校验和?

如何使用Npgsql从SELECT获得所有查询结果

JSON串行化程序问题.SQLite中的空值

我想根据姓氏按字母顺序对包含150行徽章编号、姓氏、名字、地址等的文件进行排序.e

使用Blazor WebAssembly提高初始页面加载时间的性能

如何在单击按钮后多次异步更新标签

根据优先级整理合同列表