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

ASP.NET Core Razor Pages中如何正确重定向回当前页面

ASP.NET Core Razor Pages 重定向问题解决方案

问题根因梳理

  • 重定向到产品页失效:你的页面路由配置了必填的{id}参数,直接写Redirect("/product")没有传递参数,匹配不到路由
  • 直接调用OnGet无效:手动调用方法不会触发Razor Pages完整的请求管道,页面渲染所需的上下文状态没有正确初始化
  • 空引用异常:OnPost逻辑执行完如果要渲染当前页面,没有给Product属性赋值,前端绑定的时候就会报空

具体修复方案

1. 收藏操作完成后重定向回当前页

优先采用 PRG(Post/Redirect/Get) 标准模式,用Razor Pages内置的RedirectToPage方法,自动适配路由:

// 省略添加收藏的业务逻辑
// 重定向到当前页,传递id参数,会自动触发OnGet方法重新加载产品数据
return RedirectToPage(new { id = ProductId });

2. 登录跳转支持回跳

重定向到登录页时携带当前页面地址作为returnUrl参数,ASP.NET Core默认的身份登录逻辑会自动识别该参数,登录完成后直接跳回当前商品页:

if (!User.Identity.IsAuthenticated)
{
    var returnUrl = Url.Encode(Request.Path + Request.QueryString);
    return Redirect($"/login?returnUrl={returnUrl}");
}

3. 可选:不需要重定向的场景直接赋值返回页面

如果你不想走重定向,要直接在Post后渲染当前页面,手动给Product赋值即可避免空引用异常:

// 省略业务逻辑
Product = ProductService.Get(ProductId);
return Page();

完整修正后的代码

页面后置代码

[BindProperty(SupportsGet = true)]
public int ProductId { get; set; }

public Product Product { get; set; }

public void OnGet()
{
    Product = ProductService.Get(ProductId);
}

public IActionResult OnPost()
{
   if (!User.Identity.IsAuthenticated)
   {
       var returnUrl = Url.Encode(Request.Path + Request.QueryString);
       return Redirect($"/login?returnUrl={returnUrl}");
   }
   // 执行添加到收藏夹的业务逻辑
   ProductService.AddFavorite(User.Identity.Name, ProductId);
   // 重定向回当前产品页
   return RedirectToPage(new { id = ProductId });
}

Razor页面代码无需修改,保持原有逻辑即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:45:03