You need to enable JavaScript to run this app. Asp.Net Core 完成更新后弹窗提示再跳转其他页面不生效如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Asp.Net Core 完成更新后弹窗提示再跳转其他页面不生效如何解决

问题根因

你当前的写法中,Response.WriteAsync 写入的脚本内容还没返回到客户端,后续的RedirectToAction会直接返回302重定向响应,浏览器收到302会直接跳转目标页面,根本不会执行你写入的JS脚本,所以看不到弹窗也无法按预期执行逻辑。


解决方案

方案1:前端脚本控制跳转(快速实现)

直接在返回的脚本里加入跳转逻辑,不需要用服务端重定向,代码修改如下:

[HttpPost("Home/Edit/{id}")]
[ValidateAntiForgeryToken]
public ActionResult Edit(int id, IFormCollection collection)
{
    try
    {
       /*业务逻辑代码*/
        // 直接返回包含弹窗+跳转逻辑的内容,不要用RedirectToAction
        return Content($"<script>alert('successfully updated');location.href='{Url.Action(nameof(List))}'</script>", "text/html; charset=utf-8");
    }
    catch
    {
        return View();
    }
}

注意:如果提示内容包含用户输入的动态内容,需要做XSS转义,避免脚本注入风险


方案2:TempData传递消息(更符合MVC规范)

把提示消息存在TempData中,服务端正常重定向,在目标页面判断是否有提示消息再弹出,实现逻辑和视图分离。

控制器代码修改:

[HttpPost("Home/Edit/{id}")]
[ValidateAntiForgeryToken]
public ActionResult Edit(int id, IFormCollection collection)
{
    try
    {
       /*业务逻辑代码*/
        TempData["AlertMsg"] = "successfully updated";
        return RedirectToAction(nameof(List));
    }
    catch
    {
        return View();
    }
}

List视图添加弹窗逻辑:

在List对应的Razor视图中加入以下代码:

@if (TempData["AlertMsg"] != null)
{
    <script>
        alert('@TempData["AlertMsg"]');
    </script>
}

说明:TempData默认是单次请求有效,跳转后读取一次就会自动销毁,刚好匹配这类操作提示的场景,不需要手动清理数据


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 04:57:04