Response.Write无法正常工作

时间:2016-04-11 19:43:25

标签: c# asp.net-mvc-5 response.write

在我的控制器中,我有条件声明:

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警报..当此条件触发时它不会出现。有什么理由为什么?

感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

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

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

的伪代码:

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

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

答案 1 :(得分:4)

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

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