如何从JavaScript调用RazorPage中指定的OnGet方法?
问题:Razor Page自定义OnGet方法无法触发,请求始终进入默认OnGet
核心原因:URL参数格式错误
你构造请求URL时,第二个参数使用了问号?,这会导致handler参数的值被识别为NextEmployee?employeeId,而非预期的NextEmployee,因此框架找不到对应的OnGetNextEmployee方法,只能 fallback 到默认的OnGet。
解决方案:修正URL参数分隔符
将URL中第二个参数的?替换为&,正确的URL格式应为:
var wnd = window.parent.$("#DetailWnd").data("kendoWindow"); var _url = "/MyRazorPage?handler=NextEmployee&employeeId=" + $('#EmployeeId').val(); wnd.refresh({ url: _url });
额外优化建议
你当前在自定义方法中直接调用OnGet方法的方式不符合Razor Page的请求处理规范,建议改用RedirectToPage进行重定向,确保请求流程正确:
public IActionResult OnGetNextEmployee(int employeeId) { int index = ISP.EmployeeIds.FindIndex(id => id == employeeId); if(index == -1 || index == ISP.EmployeeIds.Count - 1) { return RedirectToPage("./MyRazorPage", new { employeeId }); } else { int nextEmployeeId = ISP.EmployeeIds[index + 1]; return RedirectToPage("./MyRazorPage", new { employeeId = nextEmployeeId }); } } public IActionResult OnGetPreviousEmployee(int employeeId) { int index = ISP.EmployeeIds.FindIndex(id => id == employeeId); if (index == -1 || index == 0) { return RedirectToPage("./MyRazorPage", new { employeeId }); } else { int previousEmployeeId = ISP.EmployeeIds[index - 1]; return RedirectToPage("./MyRazorPage", new { employeeId = previousEmployeeId }); } }
内容的提问来源于stack exchange,提问作者Legion
相关产品推荐
相关产品推荐

