【问题标题】:NullReferenceException after querying database using ToAsyncList() but not when ToList() is used [duplicate]使用 ToAsyncList() 查询数据库后出现 NullReferenceException,但使用 ToList() 时不会出现 [重复]
【发布时间】:2021-04-27 13:52:00
【问题描述】:

我正在使用 ASP.NET Core Razor Pages 构建一个待办事项列表应用程序,并且我正在使用 EF Core。

我有一个 ToDo 模型

public class ToDo
{
    public int Id { get; set; }
    public string Title { get; set; }
    public bool IsCompleted { get; set; }
}

Heres PageModel:

public class IndexModel : PageModel
{
    public IEnumerable<ToDo> ToDos { get; set; }

    // constructor and DI code omitted 

    public async void OnGet()
    {
        ToDos = await _context.ToDos.ToListAsync();
    }
}

这是使用这个的剃须刀页面:

@page
@model IndexModel
@{
    Layout = "_Layout";
}

<div>
    @foreach(var todo in Model.ToDos)
     {
        <h4>@todo.Title</h4>
        <p>Is Completed: @(todo.IsCompleted ? "Yes" : "No")</p>
     }
</div>

当我访问此页面时,我在Model.ToDos 收到System.NullReferenceException

但是,当我将 OnGet 方法更改为使用 ToList() 时:

public void OnGet()
{
    ToDos = _context.ToDos.ToList();
}

一切都很完美。

为什么我不能使用ToListAsync()

【问题讨论】:

标签: c# asp.net-core entity-framework-core razor-pages nullreferenceexception


【解决方案1】:

你试过了吗?

    public async Task OnGetAsync()
    {
        ToDos = await _context.ToDos.ToListAsync();
    }

【讨论】:

  • 这确实有效!您能否解释一下为什么我的方法是错误的,而这种方法是正确的。我是 C# 新手。
  • 喜欢@phuzi 链接。 Async and Await 是一个相当大的话题。我个人的规则是,任何调用异步方法的方法都应该是异步方法,并且返回类型应该是 Task 或 Task,其中返回类型可以是字符串、int、对象等。您应该始终等待您的异步方法,除非您打算调用异步方法并执行其他操作,然后在代码中等待结果。请在 YouTube 上观看一些关于“async await c#”的视频,以便更好地理解。
猜你喜欢
  • 2015-05-01
  • 2014-01-06
  • 2018-11-06
  • 2010-12-03
  • 2021-12-15
  • 2012-06-25
  • 2014-02-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多