You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Razor Pages未显示预期HTML内容的问题排查

问题原因

ASP.NET的路由匹配遵循注册优先原则,你先注册了控制器路由,所以请求/Parks/{id}/Details会被Park控制器的Details方法优先捕获,而不会匹配到自定义的Razor Pages页面。

解决方案

1. 调整路由注册顺序

在program.cs中,将MapRazorPages()移至控制器路由之前,让Razor Pages路由优先匹配请求:

app.UseEndpoints(endpoints =>
{
    // 优先注册Razor Pages路由
    endpoints.MapRazorPages();

    endpoints.MapControllerRoute(
            name: "parks",
            pattern: "Parks/{id}/{action=Details}",
            defaults: new { controller = "Park" });

    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
});

2. 确认Razor Pages的路由指令

在每个Parks/{id}/Details.cshtml页面顶部,添加明确的@page指令,确保路由模板与请求路径完全匹配:

@page "/Parks/{id}/Details"
@model YourProjectNamespace.Parks.[ParkId].DetailsModel
<!-- 页面自定义内容 -->

如果ID是整数类型,可以加上类型约束以提高匹配精度:@page "/Parks/{id:int}/Details"

3. 优化导航链接(可选)

避免硬编码路径,使用Url.Page()生成Razor Pages的正确链接,防止路径错误:

<a href="@Url.Page($"/Parks/{park.Id}/Details")" class="dropdown-item">
    <picture>
        <source media="(min-width:768px)" srcset="@park.DropdownImage">
        <img src="#" alt="@park.ParkName Menu" width="134" height="128">
    </picture>
    <p>@park.ParkName</p>
</a>

替代方案(无需调整路由顺序)

如果不想修改路由注册顺序,可以修改控制器路由的模板,让它与Razor Pages路径区分开,比如将控制器路由的pattern改为"Park/{id}/{action=Details}"(去掉末尾的s),此时控制器路径为/Park/1/Details,Razor Pages路径为/Parks/1/Details,两者自然不会冲突。

内容的提问来源于stack exchange,提问作者acekensei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 04:53:29