如果不符合条件,则从公共异步任务OnGetAsync()

时间:2019-05-23 17:29:19

标签: asp.net-core async-await razor-pages asp.net-core-2.2

我是“异步”和“任务”内容的新手。 我似乎无法在OnGetAsync()中使用简单的if {} else {}。

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

我得到的错误来自“帐户”页面,我试图通过使用主页上的“ RedirectToPage(“ ./ Index”)”来避免这种情况。 我尝试在RedirectToPage前面放置“返回”字词,但这样做时它变成红色。另外,如果满足第一个条件(“会话”对象中有一个值),则“帐户”页面将正确显示。因此,我很确定问题出在我试图重定向“其他”陈述中的原因。

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 个答案:

答案 0 :(得分:1)

您需要结合使用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");
    } 
}