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

Razor Pages如何从标记中获取页面URL?替代MVC的@Html.Url()方案

在Razor Pages中获取页面URL字符串的解决方案

好问题!确实在Razor Pages里,MVC时代常用的@Html.Url()方法已经被移除了,但我们有几种实用的替代方案,不管是要在前端JavaScript里使用,还是在后台PageModel中生成URL都能搞定:

1. 直接使用Url.Page()方法(最推荐)

这是Razor Pages里专门用来生成页面URL的内置方法,用法简单直观,直接在Razor视图里调用就行:

  • 获取当前页面的URL:
    @Url.Page(null)
    
  • 生成其他页面的URL:
    @Url.Page("/About")
    
  • 带路由参数的URL:
    @Url.Page("/Product", new { id = 123 })
    

如果要在JavaScript里使用,直接把生成的URL嵌入脚本即可:

// 生成带参数的产品页面URL
const productDetailUrl = '@Url.Page("/Product", new { id = 123 })';
// 跳转页面
window.location.href = productDetailUrl;

2. 在后台PageModel中使用LinkGenerator服务

如果需要在后台逻辑里生成URL(比如要传递给前端、或者做重定向),可以通过依赖注入LinkGenerator服务来实现:

首先在PageModel里注入:

private readonly LinkGenerator _linkGenerator;

public IndexModel(LinkGenerator linkGenerator)
{
    _linkGenerator = linkGenerator;
}

然后在OnGet/OnPost方法里生成URL:

public void OnGet()
{
    // 生成About页面的URL
    var aboutPageUrl = _linkGenerator.GetPageUrl(HttpContext, "/About");
    // 生成带参数的Product页面URL
    var productPageUrl = _linkGenerator.GetPageUrl(HttpContext, "/Product", values: new { id = 123 });
    
    // 把URL存到ViewData,供前端取用
    ViewData["ProductUrl"] = productPageUrl;
}

前端可以这样调用:

const productUrl = '@ViewData["ProductUrl"]';

3. 间接利用标签助手获取URL

如果你习惯用Razor Pages的标签助手,也可以通过隐藏元素来存储URL,再用JavaScript读取:

<!-- 用asp-page生成URL,隐藏元素不显示 -->
<a id="productLink" asp-page="/Product" asp-route-id="123" style="display: none;"></a>

然后在JS里读取href属性:

const productUrl = document.getElementById('productLink').getAttribute('href');

总的来说,Url.Page()是最直接高效的方案,适合大多数前端场景;LinkGenerator则更适合后台逻辑中生成URL的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 19:32:35