Razor Pages动态页面异常:Opponents带参数访问出现404问题求助
解决Opponents页面带参数访问404问题
问题原因分析
- 路由配置缺失:Razor Pages默认不会自动将URL后续路径段绑定为页面参数,Years页面能正常工作大概率是因为其
.cshtml文件配置了带参数的路由模板,而Opponents页面未做对应配置。 - 代码逻辑缩进错误:
OnGet方法的else块未用大括号包裹,导致GameSummaries赋值和返回逻辑的执行不符合预期。
解决方案
1. 配置页面路由模板
打开Opponents.cshtml文件,修改顶部的@page指令,添加参数化路由模板:
@page "{Opponent?}" @model Alpha.Pages.OpponentsModel
{Opponent?}表示该参数为可选,既支持无参数访问/Opponents(触发重定向),也支持带参数访问/Opponents/Centerville(自动绑定参数并渲染页面)。
2. 修正OnGet方法的逻辑缩进
修改Opponents.cshtml.cs中的OnGet方法,为else块添加大括号,确保逻辑正确执行:
using Alpha.Data; using Alpha.Models; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; namespace Alpha.Pages { public class OpponentsModel : PageModel { private AlphaContext context; public IEnumerable<GameSummary> GameSummaries { get; set; } = Enumerable.Empty<GameSummary>(); public OpponentsModel(AlphaContext ctx) { context = ctx; } public IActionResult OnGet(string Opponent) { if (Opponent is null) return RedirectToPage("OpponentsIndex"); else { GameSummaries = context.GameSummaries.Where(s => s.Opponent == Opponent); return Page(); } } } }
- 移除参数前不必要的
@符号(参数名无需通过@引用) - 使用
Page()替代new PageResult(),这是Razor Pages返回当前页面的标准写法
3. 验证路由匹配
确保项目路由配置中没有自定义规则覆盖Opponents页面的路由。如果Program.cs中有自定义路由映射,确认不存在冲突规则。
完成以上修改后重启应用,访问/Opponents/Centerville即可正常渲染页面。
内容的提问来源于stack exchange,提问作者Jim Becker
相关产品推荐
相关产品推荐

