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

Razor页面OnGetAsync中RedirectToPage跳转失效问题

Razor页面OnGetAsync中RedirectToPage未触发跳转问题

Razor页面的OnGetAsync方法在未读取Cookie时可正常显示指定城市列表;添加Cookie判断分支后,调用RedirectToPage("/DanceList/ThisCity")未触发跳转,代码继续执行后续逻辑,仅显示Cookie中的单个城市,而非跳转到目标页面。已查阅相关问题并搜索谷歌但无匹配方案,期望实现读取Cookie后跳转到/DanceList/ThisCity页面并携带Cookie中的城市信息。

正常运行的代码片段

public async Task OnGetAsync(byte ClearChoice)
{
        //THESE ARE THE CITY ID'S WE ARE DISPLAYING
        var citylist = new int[] { 1, 2, 4 };

        var query = _context.tblCities.AsQueryable();

        query = query.Where(c => citylist.Contains(c.CityID)).OrderBy(c=>c.StateName);

        //AND FINALLY OPEN THE RAZOR PAGE
        Cities = await query.ToListAsync();

}

跳转失效的代码片段

public async Task OnGetAsync(byte ClearChoice)
{
    //THESE ARE THE CITY ID'S WE ARE DISPLAYING
    var citylist = new int[] { 1, 2, 4 }; var cookieResults = "";

    cookieResults = Request.Cookies["CityID"];

    if (cookieResults == null)
    {
        //SHOW ALL CITIES

    }
    else
    {
        citylist = new int[] { Int32.Parse(cookieResults) };  //ONE CITY FROM COOKIE

       RedirectToPage("/DanceList/ThisCity", new { cookieResults }); //CODE SKIPS THIS AND CONTINUES ON TO BOTTOM
       
    }

    var query = _context.tblCities.AsQueryable();

    query = query.Where(c => citylist.Contains(c.CityID)).OrderBy(c=>c.StateName);

    //AND FINALLY OPEN THE RAZOR PAGE
    Cities = await query.ToListAsync();
}

问题原因及修复方案

问题核心是未返回RedirectToPage生成的跳转结果。当前代码仅调用方法但未返回,导致后续代码继续执行,跳转逻辑未生效。

修复方式如下:

  1. 更改方法返回类型为async Task<IActionResult>,支持返回跳转或页面结果。
  2. 在Cookie存在的分支中,直接返回RedirectToPage的结果,终止后续代码执行。
  3. 无Cookie的分支执行完查询逻辑后,返回Page()结果以渲染当前页面。

修复后的代码示例:

public async Task<IActionResult> OnGetAsync(byte ClearChoice)
{
    //THESE ARE THE CITY ID'S WE ARE DISPLAYING
    var citylist = new int[] { 1, 2, 4 }; 
    var cookieResults = "";

    cookieResults = Request.Cookies["CityID"];

    if (cookieResults == null)
    {
        //SHOW ALL CITIES
        var query = _context.tblCities.AsQueryable();
        query = query.Where(c => citylist.Contains(c.CityID)).OrderBy(c=>c.StateName);
        Cities = await query.ToListAsync();
        return Page();
    }
    else
    {
        var cityId = Int32.Parse(cookieResults);
        // 返回跳转结果,传递城市ID参数
        return RedirectToPage("/DanceList/ThisCity", new { cityId }); 
    }
}

补充说明:目标页面ThisCity需要定义对应参数接收传递的值,示例如下:

public async Task OnGetAsync(int cityId)
{
    // 根据cityId处理业务逻辑
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 16:14:58