回复.书写不正常



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

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 });

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

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

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

最新更新