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生成的跳转结果。当前代码仅调用方法但未返回,导致后续代码继续执行,跳转逻辑未生效。
修复方式如下:
- 更改方法返回类型为
async Task<IActionResult>,支持返回跳转或页面结果。 - 在Cookie存在的分支中,直接返回
RedirectToPage的结果,终止后续代码执行。 - 无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
相关产品推荐
相关产品推荐

