我正在我们的一个项目上测试 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();
最佳答案
@bind
中不能有 null。
<input @bind="RandomDish.Name" />
使用 @if (RandomDish != null)
或类似内容包围 Save block 。
关于c# - Blazor Server托管,null引用异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72576886/