首页 > 解决方案 > 评估 OnGetAsync 之前的 Razor 页面呈现

问题描述

下面的代码返回ArgumentNullException: Value cannot be null. (Parameter 'source')错误。错误由Model.Players.Any(). 似乎页面是在评估文件背后的代码之前呈现的。我相信该错误必须与异步调用 OnGetAsync 有关,但我不知道如何修复它。使用 Visual Studio 调试,我检查了 Players 属性的值并正确评估(但在剃须刀页面呈现后 - 并抛出错误)

文件后面的代码(提取):

    public IEnumerable<Player> Players { get; set; }
    public async void OnGetAsync()
    {
        IEnumerable<Club> clubs = await clubService.GetAllClubs();
        IEnumerable<User> users = _userManager.Users;

        Players = from user in users
                  join club in clubs on user.ClubId equals club.ClubId
                  orderby user.Name
                  select new Player
                  {
                      UserId = new Guid(user.Id),
                      Name = user.Name,
                      Surname = user.Surname,
                      DOB = user.DOB,
                      ClubId = club.ClubId,
                      ClubName = club.ClubName,
                      ClubLogo = club.ClubLogo
                  };
    }

Pazor 页面(摘录):

    if (Model.Players.Any())
    {
        foreach (Player player in Model.Players.OrderBy(u => u.Name).ThenBy(u => u.Surname))
        {
            <div class="col-12 col-md-6 col-lg-4 col-xl-3 my-2">
                <div class="card">
                    <div class="card-header d-inline-flex align-items-center">
                        <h6>@player.Name @player.Surname</h6>
                        @if (player.ClubLogo != null)
                        {
                            <img src="~/img/clublogos/@player.ClubLogo" height="30" class="mx-2" />
                        }
                    </div>
                </div>
            </div>
        }
    }
    else
    {
        <h6>No players created yet</h6>
    }

标签: asp.net-coreasynchronousserver-side-renderingrazor-pages

解决方案


我已经解决了这个问题。

问题是 OnGetAsync 处理程序方法返回 void 而不是 Task

public IEnumerable<Player> Players { get; set; }
public async Task OnGetAsync()
{
    IEnumerable<Club> clubs = await clubService.GetAllClubs();
    IEnumerable<User> users = _userManager.Users;

    Players = from user in users
              join club in clubs on user.ClubId equals club.ClubId
              orderby user.Name
              select new Player
              {
                  UserId = new Guid(user.Id),
                  Name = user.Name,
                  Surname = user.Surname,
                  DOB = user.DOB,
                  ClubId = club.ClubId,
                  ClubName = club.ClubName,
                  ClubLogo = club.ClubLogo
              };
}

推荐阅读