asp.net-core - 如果不满足条件,则从公共异步任务 OnGetAsync() 重定向到不同的 Razor 页面
问题描述
我是“异步”和“任务”的新手。我似乎无法在 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 前面加上“return”字样,但是当我这样做时它变成了红色。此外,如果满足第一个条件(Session 对象中有一个值),Accounts 页面将显示没有错误。所以,我很确定问题出在我试图在“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 中,它循环并显示行。我不确定为什么它甚至会到达 Accounts.chstml。
解决方案
您需要使用Task<IActionResult>
in 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");
}
}
微软的文档在这里有一些很好的阅读:
根据评论,您可以运行此 w/o async。
public IActionResult OnGet()
{
if (HttpContext.Session.GetString("LoggedStatus") != null)
{
//KEEP GOING
Accounts = _context.Accounts.ToList();
return Page();
}
else
{
return RedirectToPage("./Index");
}
}
推荐阅读
- javascript - javascript recursion null TypeError 在不应执行的 while 循环体中
- javascript - 如何让私有方法在 TypeScript 中工作?
- html - 提高不断重绘网页区域的性能
- pandas - 无法在 seaborn.distplot 中使用 fit 方法
- javascript - 数组极端情况下的二分搜索
- postgresql - 当我尝试在 Postgres 中保存数据帧时,Pyspark EMR“连接尝试失败”
- reactjs - 仅客户端路由的缺点是什么?
- python - 纬度/经度转换 8 位
- html - 悬停时显示隐藏的 gif
- r - R,过滤数据框单元格中列表中的元素