解决InvalidOperationException: Multiple handlers matched异常求助
解决ASP.NET Core Razor Pages中"InvalidOperationException: Multiple handlers matched."异常
问题原因
你的代码里定义了两个同名的OnGetAsync方法,一个无参、一个带int? id参数。Razor Pages的请求处理器匹配机制不会根据参数区分同名的Handler方法,因此无法确定执行哪一个,抛出该异常。
解决方案
根据你的需求(查询Usuario表所有数据 + 按id查询Curso表记录),最优方案是将两个OnGetAsync方法合并为一个,在同一个方法中处理两种逻辑:
namespace AlanKardek.Pages.Prof_View; public class AlunoModel : PageModel { private readonly AlanKardekContext _context; public AlunoModel(AlanKardekContext context) { _context = context; } public IList<Usuario> Usuario { get; set; } = default!; [BindProperty] public Curso Curso { get; set; } = default!; public async Task OnGetAsync(int? id) { // 加载所有Usuario数据 if (_context.Usuarios != null) { Usuario = await _context.Usuarios.ToListAsync(); } // 如果传入了id参数,加载对应Curso记录 if (id.HasValue && _context.Curso != null) { var curso = await _context.Curso.FirstOrDefaultAsync(m => m.Id == id); if (curso != null) { Curso = curso; } } } }
可选方案(命名处理器)
如果确实需要分开两个方法,可以使用命名处理器,给方法指定不同的Handler名称:
// 无参方法,默认OnGet处理器 public async Task OnGetAsync() { if (_context.Usuarios != null) { Usuario = await _context.Usuarios.ToListAsync(); } } // 带参方法,指定名为"Curso"的处理器 public async Task<IActionResult> OnGetCursoAsync(int? id) { if (id == null || _context.Curso == null) { return NotFound(); } var curso = await _context.Curso.FirstOrDefaultAsync(m => m.Id == id); if (curso == null) { return NotFound(); } Curso = curso; return Page(); }
调用带参方法时,需要在URL中指定处理器:/Prof_View/Aluno?handler=Curso&id=xxx。不过这种方式不符合你"同一页面加载两种数据"的需求,因此更推荐第一种合并方案。
内容的提问来源于stack exchange,提问作者PEDRO HENRIQUE PERES TEODORO
相关产品推荐
相关产品推荐

