System.Threading.Tasks.Task OnGetAsync(), Void OnGet()

c# - InvalidOperationException : Multiple handlers matched. 以下处理程序匹配路由数据并满足所有约束:-LMLPHP 在 Microsoft Visual Studio 2017 中为 .NET Core 2.1 构建应用程序时收到此错误。这是我认为其中包含错误的 View 。它用于主 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 的命名,因为这也可能导致路由问题。


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");
    }
}

引用 Introduction to Razor Pages in ASP.NET Core

关于c# - InvalidOperationException : Multiple handlers matched. 以下处理程序匹配路由数据并满足所有约束:,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51187908/

10-12 14:24