如何在Razor Pages中定义带根值与Slug的路由?
问题分析与解决步骤
1. 修正@page指令格式
目标页面ProductCategory.cshtml的@page指令格式错误,当前写法@page {id}缺少引号会导致路由解析异常,需修改为:
@page "{id}"
这样Razor Pages才能正确捕获URL中的id参数(即你的Slug值)。
2. 调整页模型参数默认值
在页模型的OnGet方法中,给page参数设置默认值,避免未传递时出现默认值0的问题:
public void OnGet(string id, int page = 1) { // 业务逻辑代码 }
同时确保id参数名称与路由模板中的{id}、标签助手的asp-route-id完全一致,保证参数绑定正常。
3. 验证标签助手与数据有效性
检查<a>标签生成的实际URL(可通过浏览器查看元素源码确认),同时确保category.Slug有有效值,若该字段为空或null,会导致id参数缺失,无法生成符合预期的链接。你的标签写法本身无问题,只要category.Slug正常,应该生成http://localhost:5001/productCategory/cars?page=1格式的链接。
4. 关于Razor Pages的路由配置
Razor Pages默认采用文件系统约定路由,不需要像MVC那样在Startup.cs(或.NET 6+的Program.cs)中配置MapRoute。页面路由由文件路径和@page指令共同决定:
- 若页面文件位于
Pages/ProductCategory.cshtml,默认路由为/ProductCategory - 加上
@page "{id}"后,路由变为/ProductCategory/{id}
如果需要自定义全局路由规则,可在Program.cs中通过AddRazorPagesOptions配置,示例如下:
builder.Services.AddRazorPages(options => { // 给ProductCategory页面添加自定义路由规则 options.Conventions.AddPageRoute("/ProductCategory", "{id}"); });
但你的场景无需额外配置,修正@page指令和参数默认值即可解决问题。
内容的提问来源于stack exchange,提问作者Jush Stone
相关产品推荐
相关产品推荐

