You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

ASP.NET Core:如何从cshtml页面内的按钮跳转至指定html/cshtml页面并解决静态资源引用问题

解决Razor Pages页面跳转与静态资源加载问题

我来帮你拆解问题,分两部分解决:一是Pages目录下Razor页面的跳转问题,二是wwwroot中静态HTML的资源加载问题,都是ASP.NET Razor Pages里常见的路由和资源引用误区。

一、修复Pages目录下Razor页面的跳转

首先要明确:Razor Pages(.cshtml文件)不是静态文件,不能通过文件路径直接访问,它是由ASP.NET路由系统处理的,跳转时必须用路由路径,不是文件路径。

你有两种靠谱的解决方式:

1. 推荐使用ASP.NET标签助手(最稳妥)

asp-page标签助手可以自动生成正确的路由路径,适配部署环境的变化,不用手动写路径。修改你的按钮代码:

<button type="button" class="create_but">
    <a asp-page="./createCampaign">Create Campaign</a>
</button>
  • ./createCampaign是相对当前页面(Index.cshtml在Pages根目录)的路由,对应Pages/createCampaign.cshtml文件;
  • 如果目标页面在Pages的子目录(比如Pages/Campaigns/addCampaign.cshtml),就写./Campaigns/addCampaign或者绝对路由/Campaigns/addCampaign

2. 直接写绝对路由路径

如果不想用标签助手,直接写根路径开头的路由(Razor Pages默认路由是页面文件名去掉.cshtml):

<button type="button" class="create_but">
    <a href="/createCampaign">Create Campaign</a>
</button>

这种方式也能正确跳转,因为路由系统会匹配到Pages/createCampaign.cshtml页面。

为什么之前的../Pages/createCampaign.cshtml不行?因为服务器会把它当成静态文件请求,而Razor Pages需要经过路由解析、执行页面逻辑后才返回HTML,直接访问文件路径会被拒绝或者返回原始cshtml代码。

二、修复wwwroot中静态HTML的资源加载问题

wwwroot里的静态HTML文件不能用~/css/xxx.css这种路径——~是ASP.NET Razor视图特有的路径符号,静态HTML里服务器不会解析它,浏览器会把~/当成路径的一部分,导致找不到资源。

正确做法是用根相对路径(以/开头),让浏览器从网站根目录开始查找资源:

<!-- 错误写法 -->
<link rel="stylesheet" href="~/css/style.css">
<script src="~/js/script.js"></script>

<!-- 正确写法 -->
<link rel="stylesheet" href="/css/style.css">
<script src="/js/script.js"></script>

不管你的静态HTML在wwwroot的哪个子目录(比如html/insertCampaign.html),这种写法都能正确加载根目录下css和js文件夹里的资源。

三、最佳实践建议

  • 优先用Razor Pages(.cshtml)来做业务页面:它能完美集成ASP.NET的路由、模型绑定等功能,静态资源引用直接用~/就可以,维护起来更统一;
  • 静态HTML只用于纯静态内容:如果必须用,所有资源引用都用根相对路径,避免层级变化导致的路径错误;
  • 跳转Razor Pages时优先用asp-page标签助手:后续如果修改页面路由(比如在@page指令里自定义路由),标签助手会自动更新跳转路径,不用手动修改。

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

火山引擎 最新活动