.NET Core 中MVC视图使用asp-page跳转Razor Page异常问题
问题根因
- 出现这个现象的核心原因有两点:
- Razor Page锚点属性未被解析:MVC Razor视图默认仅加载MVC路由相关的Tag Helper,如果你没有引入Razor Page专属的Tag Helper程序集,
asp-page会被当成无意义的自定义HTML属性,根本不会生成有效的href链接。此时浏览器对没有href属性的a标签的默认行为就是刷新当前页面,同时路径会按相对规则拼接成当前目录下的mypage地址,也就是你看到的/SiteFromWhichIRedirect/mypage跳转效果。 - 路由服务未启用:就算属性解析正常,如果应用没有在终端路由配置中显式启用Razor Pages的端点映射,系统也无法匹配到目标Razor Page,同样会出现跳转失败、刷新当前页的问题。
- Razor Page锚点属性未被解析:MVC Razor视图默认仅加载MVC路由相关的Tag Helper,如果你没有引入Razor Page专属的Tag Helper程序集,
修复操作步骤
- 第一步:确认路由配置合规
在.NET 6+的Program.cs或旧版本的Startup.cs中,检查终端端点配置,保证Razor Pages的映射代码和MVC路由配置并列存在,对应代码为app.MapRazorPages(),不要遗漏这行配置。 - 第二步:补全Tag Helper引用
打开MVC视图目录下的全局引用文件Views/_ViewImports.cshtml,添加Razor Page的Tag Helper引入语句:@addTagHelper *, Microsoft.AspNetCore.Mvc.RazorPages
配置完成后,当前目录下的所有MVC Razor视图就能正确识别asp-page、asp-page-handler等Razor Page专属的锚点属性了。 - 第三步:按规范编写跳转标签
写a标签时注意,asp-page的属性值要以斜杠开头,代表Razor Page应用根路径下的页面地址;如果需要携带参数,可以用asp-route-xxx的格式拼接路由参数,示例代码如下:<a asp-page="/mypage" asp-route-orderId="@Model.OrderId" asp-route-userName="@Model.UserName">跳转目标页面</a> - 传复杂模型的注意事项:如果需要传递整个复杂模型而非零散路由参数,不要直接把模型序列化拼到URL查询参数中,容易触发URL长度超限问题,可以通过表单POST提交、TempData缓存跨请求传值的方式实现跳转传参。
内容的提问来源于stack exchange,提问作者San
相关产品推荐
相关产品推荐

