System.Threading.Tasks.Task OnGetAsync()、Void OnGet()
我在 Microsoft Visual Studio 2017 中构建 .NET Core 2.1 应用程序时收到此错误。我认为这是其中存在错误的视图。它用于主index.cshtml razor 页面。
public class IndexModel : PageModel
{
private readonly AppDbContext _db;
public IndexModel(AppDbContext db)
{
_db = db;
}
public IList<Customer> Customers { get; private set; }
public async Task OnGetAsync()
{
Customers = await _db.Customers.AsNoTracking().ToListAsync();
}
public async Task<IActionResult> OnPostDeleteAsync(int id)
{
var contact = await _db.Customers.FindAsync(id);
if (contact != null)
{
_db.Customers.Remove(contact);
await _db.SaveChangesAsync();
}
return RedirectToPage();
}
public void OnGet()
{
}
}
Razor 页面使用基于约定的处理程序进行导航。
当前 PageModel 有两个 Get 处理程序
Tasks.Task OnGetAsync()
和 Void OnGet()
,如异常中明确所述。
框架无法确定使用哪一个。
删除
void OnGet
,因为它似乎未使用。
还建议检查
OnPostDeleteAsync
的命名,因为这也可能会导致路由问题。
您可以为任何 HTTP 谓词添加处理程序方法。最常见的 处理程序是:
初始化页面所需的状态。 OnGet 示例。OnGet
处理表单提交。OnPost
命名后缀是可选的,但通常按照惯例使用 用于异步函数。Async
public class IndexModel : PageModel {
private readonly AppDbContext _db;
public IndexModel(AppDbContext db) {
_db = db;
}
public IList<Customer> Customers { get; private set; }
public async Task<IActionResult> OnGetAsync() {
Customers = await _db.Customers.AsNoTracking().ToListAsync();
return Page();
}
public async Task<IActionResult> OnPostAsync(int id) {
var contact = await _db.Customers.FindAsync(id);
if (contact != null) {
_db.Customers.Remove(contact);
await _db.SaveChangesAsync();
}
return RedirectToPage("/Index");
}
}
对于使用
dotnet watch run
的用户,请尝试重新启动应用程序(终端中的 Ctrl+R)。
我在重大代码更改后发生过这种情况。我的代码有一个匹配的处理程序,但 .NET 在重新启动之前认为有多个处理程序。