Если критерии не выполнены, перенаправить на другую страницу Razor из публичной асинхронной задачи OnGetAsync () - PullRequest
0 голосов
/ 23 мая 2019

Я новичок в вещах "async" и "task". Я не могу заставить работать простой if {} else {} внутри OnGetAsync ().

public async Task OnGetAsync()
{
    if (HttpContext.Session.GetString("LoggedStatus") != null)
    {
        //KEEP GOING
    Accounts = await _context.Accounts.ToListAsync();
    }
    else
    {
    RedirectToPage("./Index");
    } 
}

Я получаю сообщение об ошибке со страницы «Учетные записи», которую я стараюсь избегать, даже используя «RedirectToPage (« ./ Index »)», которая является моей домашней страницей. Я попытался поместить слово "return" перед RedirectToPage, но оно становится красным, когда я это делаю. Кроме того, если выполнено первое условие (в объекте Session есть значение), страницы «Учетные записи» отображаются без ошибок. Итак, я почти уверен, что проблема заключается в моей попытке перенаправить в стату "else".

NullReferenceException: Object reference not set to an instance of an object.
OESAC.Pages.Accounts.Pages_Accounts_Index.ExecuteAsync() in Index.cshtml
+
        @foreach (var item in Model.Accounts)

Ошибка выше в учетных записях прямо там, где он проходит через и отображает строки Я не уверен, почему он даже попадает в Accounts.chstml.

1 Ответ

1 голос
/ 25 мая 2019

Вам необходимо использовать Task<IActionResult> в public async Task<IActionResult> OnGetAsync() в сочетании с оператором return.

public async Task<IActionResult> OnGetAsync()
{
    if (HttpContext.Session.GetString("LoggedStatus") != null)
    {
        //KEEP GOING
        Accounts = await _context.Accounts.ToListAsync();

        return Page();
    }
    else
    {
        return RedirectToPage("./Index");
    } 
}

Документы Microsoft читайте здесь:


Основываясь на комментарии, вы можете запустить это без асинхронного.

public IActionResult OnGet()
{
    if (HttpContext.Session.GetString("LoggedStatus") != null)
    {
        //KEEP GOING
        Accounts = _context.Accounts.ToList();

        return Page();
    }
    else
    {
        return RedirectToPage("./Index");
    } 
}
...