Почему моя собственность всегда пуста после выполнения какого-либо действия? Бритвенные страницы - PullRequest
0 голосов
/ 07 июня 2019

Я создаю простое приложение todo в Razor Pages с помощью .NET Core 2.2:

public class IndexModel : PageModel
{
    private readonly ApplicationDbContext _context;

    public List<TodoItem> TodoItems { get; set; }

    public IndexModel(ApplicationDbContext context)
    {
        _context = context;
    }

    public async Task OnGet()
    {

        TodoItems = await _context.TodoItems.Where(t => t.IsDone == false).ToListAsync();
    }

но всякий раз, когда я выполняю этот код:

public async Task<IActionResult> OnPostMarkDoneAsync(int id)
    {
        if (!ModelState.IsValid)
        {
            return Page();
        }

        var item = TodoItems.First(t => t.Id == id);
        item.IsDone = true;

        _context.TodoItems.Update(item);

        var ok = await _context.SaveChangesAsync();

        if (ok != 1)
        {
            return BadRequest(500);
        }

        return RedirectToPage();
    }

Я всегда получаю нулевое исключение. Кроме того, даже если он находится на той же странице.

Когда я запускаю приложение, список TodoItems заполняется правильными данными. Но всякий раз, когда я выполняю метод OnPostMarkDoneAsync и отлаживаю его, он показывает, что список теперь равен нулю. Почему это так?

1 Ответ

1 голос
/ 07 июня 2019

TodoItems не будет сохраняться в запросах, поэтому тот факт, что вы присвоили его в OnGet, не означает, что он будет назначен в OnPostMarkAsDoneAsync. Вам нужно будет повторно получить из DbContext в OnPostMarkAsDoneAsync, как вы это сделали в OnGet.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...