Response.Write 工作不正常

Response.Write not working properly

在我的控制器中,我有一个条件语句:

if (oLevel.PostPreID == 2)
            {
                if (db.OL.Any(x => DbFunctions.TruncateTime(x.Date) == DbFunctions.TruncateTime(oLevel.FlightDate) && x.PostPreID == oLevel.PostPreID && x.AID == oLevel.AID && x.deleted == false))
                {
                    Response.Write(@"<script language='javascript'>alert('There is already a PostPreID for this AID for this Date!');</script>");
                    return RedirectToAction("Index", new { id = oLevel.AID }); ;
                }                     
            }

现在条件语句运行良好。问题是 Response.Write 警报。当此条件触发时它不会出现。有什么原因吗?

感谢任何帮助。

这不是解决此问题的正确方法。警报不起作用的原因是,在您将其写入响应后,您立即重定向到另一个视图,因此浏览器永远不会呈现您正在输出的脚本标签。

不这样做,而是让 Index 操作呈现的 Index 视图根据查询字符串参数有条件地输出脚本。

伪代码:

 return RedirectToAction("Index", new { id = oLevel.AID, alreadyExists = true });

然后在索引 action/view 中,检查 alreadyExists 是否等于 true,如果是,则让该视图输出脚本标记和警报消息。

因为您随后立即调用 RedirectToAction()。 RedirectToAction() 向浏览器发送 HTTP 302 重定向响应,导致浏览器忽略正文中的任何内容(例如您的脚本),而是重定向到新的 url.

可以 通过添加一个视图来解决这个问题,该视图寻找一个额外的参数告诉它呈现你的警报(可能作为一个灯箱,因为浏览器用 [=11 做奇怪的事情=] 这些天)。但这似乎也不对,因为这样任何人都可以通过访问 url 查看警报。可能您想在控制器或会话中做更多事情。