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

ASP.NET MVC表单提交后如何重定向至Results页面而非详情页?

解决方案

核心问题在于RedirectToAction会触发浏览器发起GET请求,而你定义的Results方法仅接受POST请求,导致无法匹配;同时直接传递模型会被解析为URL参数,而非绑定到POST方法的参数。结合你不想重复执行20秒查询的需求,可按以下步骤调整:

1. 调整Results方法,新增GET版本复用查询结果

将原本仅支持POST的Results拆分为两个版本:POST版本用于首次从Query页提交查询,GET版本用于上传后的重定向复用已有结果。同时在首次查询时将结果存入Session,避免重复执行耗时操作:

// 处理Query页的POST提交,执行耗时查询并缓存结果
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Results(InventoryModel model)
{
    // 执行耗时20秒的数据库查询
    var queryResult = // 你的查询逻辑代码
    // 将模型和查询结果存入Session,供后续复用
    Session["InventoryModel"] = model;
    Session["InventoryQueryResult"] = queryResult;
    return View(queryResult);
}

// 供上传后重定向使用的GET版本,直接从Session取缓存结果
[HttpGet]
public ActionResult Results()
{
    var queryResult = Session["InventoryQueryResult"] as YourQueryResultType;
    if (queryResult == null)
    {
        // 若缓存失效,重定向回Query页
        return RedirectToAction("Query");
    }
    return View(queryResult);
}

2. 修改Upload方法,重定向到GET版Results

完成文件上传后,直接重定向到GET版本的Results,无需传递模型(Session中已缓存所需数据):

[HttpPost]
[ValidateAntiForgeryToken()]
public ActionResult Upload(HttpPostedFileBase file, string item)
{
    // 执行文件保存逻辑(代码省略)
    // 直接重定向到GET版Results,复用缓存的查询结果
    return RedirectToAction("Results");
}

补充说明

  • 若你的查询结果体积较大,Session是合适的缓存方式;若模型较小,也可使用TempData(但TempData仅在单次重定向后有效,需注意生命周期)。
  • 可根据业务需求设置Session的超时时间,避免无效缓存占用资源;也可在用户离开Inventory相关页面时主动清理Session中的缓存数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 13:07:38